处理请求的策略设计模式
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;
}
这是一个很好的解决方案,我从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) { /* ... */ }
};
相关文章:
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 资源管理设计模式
- 用于在回调中调用解析器的设计模式
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 在这种情况下我应该使用哪种设计模式
- C++中物体改变识别的设计模式?
- 确保所有构造函数调用相同的函数 c++ 设计模式
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- 设计模式,以避免不必要地添加抽象函数以适应新功能
- 工厂设计模式优化
- 使用C++模板的数据映射器设计模式
- 为什么以及如何使用原型设计模式
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- 在C++中创建观察器设计模式的好方法
- 现代C++在多大程度上消除了对设计模式的需求?
- 对于存储另一个类所需信息的类,例如其构造,是否有设计模式?
- 下面抽象工厂设计模式的实现是正确的吗
- 处理请求的策略设计模式
- 使用策略设计模式实现输入类
- C++策略设计模式,制作一个接口数组