gpt4 book ai didi

c++ - 处理请求的策略设计模式

转载 作者:太空宇宙 更新时间:2023-11-04 11:29:14 25 4
gpt4 key购买 nike

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

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

将有 HandlerMessage 的接口(interface)和许多从它们派生的类。

假设我们有:

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 的数据库从 MessageHandler 类初始化数据库?

还是使用更复杂的解决方案更好?

感谢您的任何回复!

最佳答案

您可以像这样在处理程序的构造函数中传递对数据库的引用:

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++ - 处理请求的策略设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25466259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com