我需要重构处理请求的类。我不需要责任链,因为在编译时我已经指定了哪个请求连接到哪个处理程序。
我的想法是创建一个单例类负责所有的逻辑。例如,它将有一个指向数据库对象的指针,它将处理请求。
将有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;
}
这是一个很好的解决方案,我从MessageHandler类初始化db从SingeltonClass在单例构造函数?
或者使用更复杂的解决方案更好?
感谢您的回复!
您可以像这样在处理程序的构造函数中将引用传递给数据库:
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) { /* ... */ }
};