处理请求的策略设计模式



我需要重构处理请求的类。我不需要责任链,因为在编译时我已经指定了哪个请求连接到哪个处理程序。

我的想法是创建一个单例类负责所有的逻辑。例如,它将有一个指向数据库对象的指针,它将处理请求。

将有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) { /* ... */ }
};

最新更新