最近我一直在写类似于以下代码的内容:
messagehandler.h:
#include "message.h"
class MessageHandler {
public:
virtual ~MessageHandler() {}
virtual void HandleMessage(Message *msg) = 0:
};
persistmessagehandler.h:
MessageHandler *CreatePersistMessageHandler();
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);
}
这里的思路是隐藏PersistMessageHandler。客户端不需要为PersistMessageHandler类包含头文件,也不需要包含实现可能需要的所有包括和类型,以更清晰地分离接口和实现。它总是会被动态分配的。
所有PersistMessageHandler用户只需直接调用CreatePersistMessageHandler(..); 或者从工厂间接获取一个。
但是,我很少见到这种方法在其他地方使用。上述方法是否是良好的实践?对于简单情况,是否有其他/更好的替代方案?
std :: auto_ptr <MessageHandler> CreatePersistMessageHandler();
- Travis Gockel