[英]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.