这是一个通用的面向对象编程问题:
假设我有一个基类B:
class B {
// member functions
}
并假设我被告知通过以下工厂方法创建B的实例:
B createB(/* arguments */) {
b = ...
return b;
}
现在,问题是我需要从B派生,但我如何按照createB()进行初始化?:
class D : B {
D() {
/* need to use createB() to
initialize the base because
no equivalent constructor
exists. */
}
}
答案 0 :(得分:0)
使用工厂方法在很多方面比直接调用构造函数要好得多。一旦选择了使用工厂方法,就应该为所有派生类坚持这种方法 - 否则你违反了为什么引入工厂方法的基本原因:将对象创建与对象使用分开。
因此,不要解决从类B
的构造函数中访问类D
的工厂方法的问题,而是考虑为类D
创建工厂方法。甚至更好:创建一个公共工厂方法B createB(arguments)
,它决定了它创建和返回的类型。