基类只有一个派生类时可以吗?

zar*_*zar 4 c++ oop design-patterns

我正在使用OOD和设计模式创建密码模块.该模块将记录可记录事件的日志并读取/写入文件.我在基类中创建了接口并在派生类中实现.现在我想知道如果基类只有一个派生类,这是不是有点难闻.这种类层次结构是否不必要?现在要消除类层次结构,我当然可以在一个类中完成所有操作而不是派生,这是我的代码.

class CLogFile
{
public:
    CLogFile(void);
    virtual ~CLogFile(void);

    virtual void Read(CString strLog) = 0;
    virtual void Write(CString strNewMsg) = 0;
};
Run Code Online (Sandbox Code Playgroud)

派生类是:

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
};
Run Code Online (Sandbox Code Playgroud)

现在在代码中

CLogFile * m_LogFile = new CLogFileImpl( m_strLogPath, m_strLog );

m_LogFile->Write("Log file created");
Run Code Online (Sandbox Code Playgroud)

我的问题是,我一方面关注OOD主体并首先创建接口并在派生类中实现.另一方面,这是一种矫枉过正,它会使事情变得复杂吗?我的代码非常简单,不使用任何设计模式,但它通过派生类在通用数据封装方面确实从中获得了线索.

最终上面的类层次结构是好还是应该在一个类中完成?

izo*_*ica 7

不,实际上我相信你的设计很好.您以后可能需要为您的类添加模拟或测试实现,您的设计使这更容易.