最近,我一直在编写类似于以下代码:
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类包含 header ,而该 header 可以包含实现可能需要的所有包含和类型,而不必更清楚地分离接口(interface)和实现。
。无论如何,它总是会动态分配,
所有PersistMessageHandler用户将只调用CreatePersistMessageHandler(..);直接或间接从工厂获得。
但。我没有看到这种方法在其他地方使用太多。以上是好的做法吗?对于简单的案例,还有其他/更好的选择吗?
最佳答案
您总是必须尽可能地隐藏。您的方式(将实现类放入.cpp)是在c++中执行此操作的常用方式。