当基本初始化程序仅通过辅助函数可用时,如何从基类派生?

时间:2014-03-04 12:48:40

标签: oop design-patterns inheritance factory-method

这是一个通用的面向对象编程问题:

假设我有一个基类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. */
   }
}

1 个答案:

答案 0 :(得分:0)

使用工厂方法在很多方面比直接调用构造函数要好得多。一旦选择了使用工厂方法,就应该为所有派生类坚持这种方法 - 否则你违反了为什么引入工厂方法的基本原因:将对象创建与对象使用分开。

因此,不要解决从​​类B的构造函数中访问类D的工厂方法的问题,而是考虑为类D创建工厂方法。甚至更好:创建一个公共工厂方法B createB(arguments),它决定了它创建和返回的类型。