【发布时间】:2015-11-27 20:26:57
【问题描述】:
我正在尝试实现一个由
组成的工厂模式- 工厂类
- 具有受保护构造函数的抽象类
- 具有私有构造函数和虚拟公共的继承类 析构函数。
我想确认一下
- 除了工厂之外没有其他人不能创建任何实例
- 如果定义了新的继承类,则不需要对接口类和已定义的继承类进行任何修改。突出新的类实现并添加到工厂类中的创建方法。
我也不想为每个继承的类编写类似的代码(如每个初始化的静态工厂方法),并让未来的开发人员为工厂连接做很多工作。
即使用伪代码
class Factory;
class Interface
{
protected:
Interface(){/*Do something*/};
public:
virtual ~Interface(){/*Do something*/}
/*I wish I could do below and it is valid for all inherited
classes but friendship is not inherited in C++*/
//friend Interface* Factory::create(Type)
};
class InheritedA:public Interface
{
private:
InheritedA(){/*Do something*/};
public:
virtual ~InheritedA(){/*Do something*/}
/*I dont want to do below two lines for every inherited class*/
//friend Interface Factory::create(Type)
//public: Interface* factoryInheritedA(){return new InheritedA();}
};
class InheritedB:public Interface
{
private:
InheritedB(){/*Do something*/};
public:
virtual ~InheritedA(){/*Do something*/}
};
class Factory
{
static Interface* create(Interface type)
{
switch(type)
{
case A:
return new InheritedA();
case B:
return new InheritedB();
default:
//exceptions etc
}
}
}
int main()
{
Interface* I = Factory::create(A/*or B*/);
return 0;
}
上面的代码是我放出来的最接近的。欢迎提出任何建议(C++ 的专长、不同的设计……)。
【问题讨论】:
-
你忘记写问题了。
-
你为什么需要这一切?听起来像爪哇。这可能是 XY 问题的情况。
-
@UzorTuTuEjt 我写了我想对这些限制做些什么。我真的不明白为什么需要问句
-
一个问题是必需的,我看不出问题是什么,为什么你需要这个或者你想解决什么
-
@TonyD 在建议迁移之前请阅读网站的help center。这是伪代码,因此与 codereview 无关。
标签: c++ design-patterns factory-pattern