我可以创建单例 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.

的两个相似副本

也许我可以为 ParentClassChildClass 创建一个基础 class。我不确定,但是是否存在从单例创建 childs 的一些方法?

Singleton 有一个明确的目标。它必须确保当前环境中只存在给定类型的单个实例。

因此我看不出有什么好的理由让 methodAmethodB 在里面。特别是没有人可以创建 ParentClass 类型的对象,因此不能调用 methodAmethodB (除非它们也变成静态的)。 我认为更好的 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
    }
}