处理请求的策略设计模式

时间:2014-08-23 20:49:48

标签: c++ design-patterns

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

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

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构造函数中使用来自SingeltonClass的db从MessageHandler类初始化db?

或者最好使用更复杂的解决方案?

感谢您的回复!

1 个答案:

答案 0 :(得分:1)

您可以在处理程序的构造函数中将引用传递给数据库,如下所示:

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