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

ファクトリ メソッドを使用することは、コンストラクタを直接呼び出すよりも多くの点で優れています。ファクトリ メソッドを使用することを選択したら、すべての派生クラスに対してこのアプローチに固執する必要があります。そうしないと、ファクトリ メソッドが導入された基本的な理由に違反することになります。つまり、オブジェクトの作成とオブジェクトの使用を分離することです。

したがって、 classBのコンストラクタからclass のファクトリ メソッドにアクセスする問題を解決する代わりにD、 class にもファクトリ メソッドを作成することを検討してDください。またはさらに良いこと: 作成して返す型を自分で決定する共通のファクトリ メソッドB createB(arguments)を作成します。

于 2014-03-16T14:51:51.577 に答える