最近我一直在编写类似这样的代码:
messagehandler.h:
#include "message.h"
class MessageHandler {
public:
virtual ~MessageHandler() {}
virtual void HandleMessage(Message *msg) = 0:
};
Run Code Online (Sandbox Code Playgroud)
persistmessagehandler.h:
MessageHandler *CreatePersistMessageHandler();
Run Code Online (Sandbox Code Playgroud)
persistmessagehandler.cpp:
#include "messagehandler.h"
#include "persist.h"
class PersistMessageHandler : public MessageHandler {
private:
PersistHandle ph;
size_t count;
InternalCheck();
public:
PersistMessageHandler(int someParam);
virtual ~PersistMessageHandler ();
virtual void HandleMessage(Message *msg):
};
PersistMessageHandler::PersistMessageHandler(int someParam)
{
ph.Initialize();
}
... rest of implementation.
MessageHandler *CreatePersistMessageHandler(int someParam)
{
return new PersistMessageHandler(someParam);
}
Run Code Online (Sandbox Code Playgroud)
这里的原因是隐藏PersistMessageHandler.客户端不需要包含PersistMessageHandler类的头,包含实现可能需要的所有包含和类型,以及更清晰地分离接口和实现..无论如何它总是会被动态分配,
所有PersistMessageHandler用户只需调用CreatePersistMessageHandler(..); 直接或间接从工厂获得一个.
但.我没有看到这种方法在其他地方使用得太多.以上是好的做法吗?对于简单的案例,还有其他/更好的选择吗?