如何限制从某个类创建对象

时间:2012-08-01 18:38:18

标签: c++ inheritance private-constructor

我有一个'银行'班和一个'科'班。 'Branch'继承自'Bank'。我想只允许'Bank'对象创建新的'Branch'对象。 (例如,只有花旗集团才能开设新的花旗银行分行)。

实现这一目标的最佳设计模式是什么?

我目前正在使用私有构造函数的朋友类。但我不确定这是否是正确的做法。

1 个答案:

答案 0 :(得分:2)

  

'Branch'继承自'Bank'

有你的问题,你正在使用继承。您正在寻找一个抽象的工厂模式,其中Bank是分支创建者,并且只向其各自的创建者提供对分支的构造函数的访问。

struct Branch  //abstract
{
    virtual ~Branch() = 0;
};
class CitiBranch : Branch
{
    friend class Citi; //only Citi can create instances of CityBranch
private:
    CitiBranch();
};

struct Bank
{
    virtual ~Bank() = 0;
    virtual Branch* createBranch() = 0;
}

struct Citi : Bank
{
    virtual Branch* creatBranch()
    {
        return new CityBranch;
    }
}

这个程序是一个接口而不是一个具体的类。所以你有Branch指针和Bank指针,并不需要知道它们的确切类型。

如果您有Bank*并致电createBranch(),您将获得Branch*,但会指向正确的具体对象。