我知道单身人士和继承人并不顺利。
我的问题是:将派生类实现为单例是一种好习惯。
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
};
答案 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)
不会......或者可能导致打破单身方法?!
换句话说:这可能会使整个设计复杂化。因此,我宁愿研究基本要求,并研究其他方法来实现这些要求。