0

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

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

1 回答 1

0

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

因此,与其解决B从 class 的构造函数访问 class 的工厂方法的问题,不如考虑为 classD创建一个工厂方法D。甚至更好:创建一个通用的工厂方法B createB(arguments),它自己决定它创建和返回的类型。

于 2014-03-16T14:51:51.577 回答