我可以创建单例 child class 吗?
Can I create singleton child class?
我有一个 parent class:
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(){}
}
我要创建childclass:
class ChildClass : public ParentClass {
public:
ChildClass(){}
~ChildClass(){}
methodA() {
//do some stuff
}
}
这段代码有一些明显的问题。首先,我不能以这种方式创建 ChildClass
(parent 的构造函数是私有的)。而且似乎 ChildClass
不能直接继承自 ParentClass
。这些 class 非常相似。而且我不想创建这些 classes.
的两个相似副本
也许我可以为 ParentClass
和 ChildClass
创建一个基础 class。我不确定,但是是否存在从单例创建 childs 的一些方法?
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
}
}
我有一个 parent class:
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(){}
}
我要创建childclass:
class ChildClass : public ParentClass {
public:
ChildClass(){}
~ChildClass(){}
methodA() {
//do some stuff
}
}
这段代码有一些明显的问题。首先,我不能以这种方式创建 ChildClass
(parent 的构造函数是私有的)。而且似乎 ChildClass
不能直接继承自 ParentClass
。这些 class 非常相似。而且我不想创建这些 classes.
也许我可以为 ParentClass
和 ChildClass
创建一个基础 class。我不确定,但是是否存在从单例创建 childs 的一些方法?
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
}
}