派生类是单身人士是一个好习惯吗?

时间:2017-08-28 07:15:05

标签: c++ inheritance singleton

我知道单身人士和继承人并不顺利。

我的问题是:将派生类实现为单例是一种好习惯。

实施例

class Base
{
public:
    virtual ~Base() {}

    void Main() { Activate(); }

protected:

    virtual void Activate() = 0;
};



class Derive :
    public Base
{
public:

    static Derive& getInstance()
    {
        static Derive  instance;
        return instance;
    }

    virtual ~Derive() {}

    virtual void Activate() {}

private:

    Derive() {}
    Derive(Derive const&);              // Don't Implement.
    void operator=(Derive const&);      // Don't implement
};

1 个答案:

答案 0 :(得分:2)

答案是:取决于

请注意,继承 主要,而不是避免代码重复。它是作为工具。你说" A扩展B"当A 是-A B.这当然意味着"规则"例如应该遵循Liskov Substitution Principle

换句话说:你不会使用" A扩展B"因为你可以 - 但是因为你的OO模型/设计告诉你这样做对你有用,并且导致你尝试的正确域的OO模型,模型很好。

因此,这个问题一般无法回答 - 完全取决于您的背景。

但话虽如此:我的直觉感觉是:不是一个好主意。请记住,派生类的对象可以用作"基类"对象。换句话说:你使用那个单例对象 - 不知道你正在使用的一个对象是关于这个非常特殊的契约。像:

Base baseA = ... nonsingelton subclass of Base
Base baseA2 = ... nonsingelton subclass of Base
Base baseB = singleton instance of Derived

现在:

baseA(baseA2) maybe works

但是类似

baseA(baseB) 

不会......或者可能导致打破单身方法?!

换句话说:这可能会使整个设计复杂化。因此,我宁愿研究基本要求,并研究其他方法来实现这些要求。