簡體   English   中英

處理請求的策略設計模式

[英]Strategy Design Pattern for handling requests

我需要重構處理請求的類。 我不需要責任鏈,因為在編譯時我已經指定了哪個請求連接到哪個處理程序。

我的想法是創建一個負責所有邏輯的單例類。 例如,它將具有指向數據庫對象的指針,並將處理請求。

將會有HandlerMessage的接口以及從它們派生的許多類。

假設我們有:

class Singleton {
    Database db;
    int handleMessage(const Request& in, Response& out);
};

int Singleton::handleMessage(const Request& in, Response& out) {
    int result = 0;
    HandlerMessage* handler;
    if(in.type == RequestType::A)
        handler = new HandlerA();
    else if(in.type == RequestType::B)
        handler = new HandlerB();
    else
        return -1;
    result = handler->handle(in, out);
    delete handler;
    return result;
}

但是HandlerMessage需要使用數據庫,我想知道如何使用它們。 我可以將指向數據庫的指針作為HandlerMessage類中句柄函數的參數傳遞。 但是在我看來,這很奇怪,因為我一直都會傳遞相同的論點。 此外,並非所有處理程序都需要使用數據庫。

我的問題是:

class MessageHandler {
    static Database* db;
}

這是一個很好的解決方案,我在Singleton構造函數中從MessageHandler類中的db與SingeltonClass中的db進行了初始化?

還是使用更復雜的解決方案更好?

感謝您的答復!

您可以像這樣在處理程序的構造函數中將引用傳遞給數據庫:

handler = new HandlerA(db); //HandlerA needs to deal with database
handler = new HanlderB();   //HandlerB doesn't need to deal with database

HandlerA可能如下所示:

class HandlerA : public MessageHandler
{
    HandlerA(Database& db) { /* ... */ }

    int handle(const Request& in, Response& out) { /* ... */ }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM