我正在使用 OOD 和设计模式创建密码模块。该模块将保留可记录事件的日志并读取/写入文件。我在基类中创建了接口,在派生类中创建了实现。现在我想知道如果基类只有一个派生类,这是否是一种难闻的气味。这种类层次结构是不必要的吗?现在为了消除类层次结构,我当然可以在一个类中做所有事情而根本不派生,这是我的代码。
class CLogFile
{
public:
CLogFile(void);
virtual ~CLogFile(void);
virtual void Read(CString strLog) = 0;
virtual void Write(CString strNewMsg) = 0;
};
派生类是:
class CLogFileImpl :
public CLogFile
{
public:
CLogFileImpl(CString strLogFileName, CString & strLog);
virtual ~CLogFileImpl(void);
virtual void Read(CString strLog);
virtual void Write(CString strNewMsg);
protected:
CString & m_strLog; // the log file data
CString m_strLogFileName; // file name
};
现在在代码中
CLogFile * m_LogFile = new CLogFileImpl( m_strLogPath, m_strLog );
m_LogFile->Write("Log file created");
我的问题是,一方面我遵循 OOD 原则并首先创建接口并在派生类中实现。另一方面,它是不是有点矫枉过正,是否会使事情复杂化?我的代码很简单,不使用任何设计模式,但它确实从中获得了通过派生类进行一般数据封装的线索。
最终,上面的类层次结构是好的还是应该在一个类中完成?