我有一个“银行”类和一个“分行”类。 “Branch”继承自“Bank”。我只想允许“银行”对象创建新的“分行”对象。 (例如,只有花旗集团可以开设花旗银行的新分行)。
实现这一目标的最佳设计模式是什么?
我目前正在使用带有私有(private)构造函数的友元类。但我不确定这是否是正确的方法。
最佳答案
'Branch' is inherited from '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;
}
}
此程序针对的是接口(interface)而不是具体的类。因此,您有 Branch
指针和 Bank
指针,并且实际上不需要知道它们的确切类型。
如果您有一个 Bank*
并调用 createBranch()
,您将得到一个 Branch*
返回,但它将指向正确的具体对象。
关于c++ - 如何限制从特定类创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11765454/