使用继承来添加功能

And*_*ton 5 c++ inheritance abstract-class

我正在使用抽象基类向我的所有类添加日志记录功能。它看起来像这样:

class AbstractLog
{
public:
    virtual ~AbstractLog() = 0;

protected:
    void LogException(const std::string &);

private:
    SingletonLog *m_log;    // defined elsewhere - is a singleton object
};
Run Code Online (Sandbox Code Playgroud)

LogException()方法将文本写入SingletonLog对象中定义的日志文件,然后抛出异常。

然后我将它用作所有后续类的基类(在数百个库/DLL 中可能有数百/数千个)。

这允许我LogException()在通常会抛出异常的地方调用。

我的问题是这是否是好的设计/实践。

PS:我使用继承只是为了向我的所有类添加功能,而不是实现任何类型的多态性。最重要的是,我的所有类都与类具有 is-a 关系的概念AbstractLog是有争议的(每个类都是一个可记录的对象?嗯,是的,我想它们是,但只是因为我已经使它们如此) .

Rob*_*ski 3

你的建议会起作用,我认为更好的是创建日志类(从这个接口继承)并将其用作组合(使用接口)而不是继承 - 组合是逻辑类和日志类之间较弱的连接。最佳实践是课程越少越好。额外的好处是您可以随时扩展日志功能,而无需修改业务逻辑。

关于这个单例,也许代理模式更好?

希望,我有所帮助:)