我有一个父类:
class ParentClass {
public:
~ParentClass(){}
static ParentClass &getInstance() {
static ParentClass instance;
return instance;
}
void methodA() {
//do some stuff
}
void methodB() {
//do some stuff
methodA();
//do some stuff
}
private:
ParentClass(){}
}
我想创建子类:
class ChildClass : public ParentClass {
public:
ChildClass(){}
~ChildClass(){}
methodA() {
//do some stuff
}
}
这段代码有一些明显的问题。首先,我不能以这种方式创建ChildClass
(父母的构造函数是私有的)。似乎ChildClass
无法直接从ParentClass
继承。这些类非常相似。我不想为这些类创建两个相似的副本。
可能我可以为ParentClass
和ChildClass
创建一个基类。我不确定但是是否存在一些从单身人士创建孩子的方法?
答案 0 :(得分:1)
Singleton有一个定义明确的目标。它必须确保当前环境中只存在给定类型的单个实例。
因此,我认为没有任何理由让methodA
和methodB
在其中。特别是没有人可以创建ParentClass
类型的对象,因此无法调用methodA
和methodB
(除非它们也变为静态)。
我认为更好的OOD是仅使用getInstance()
方法创建单例并单独创建ParentClass
,其中包含对单例返回的对象的引用:
class SingletonClass {
public:
~SingletonClass (){}
static SingleInstanceClass &getInstance() {
static SingleInstanceClass instance;
return instance;
}
private:
SingletonClass (){}
}
class ParentClass {
public:
ParentClass(SingleInstanceClass& ref);
~ParentClass(){}
virtual void methodA() {
//do some stuff
}
void methodB() {
//do some stuff
methodA();
//do some stuff
}
private:
SingleInstanceClass& singInstRef;
}
然后
class ChildClass : public ParentClass {
public:
ChildClass(SingleInstanceClass& ref) : ParentClass (ref){}
~ChildClass(){}
virtual void methodA() {
//do some stuff
}
}