1. ホーム
  2. oop

[解決済み】コンストラクターとファクトリーメソッドの比較【終了しました

2022-04-16 19:47:51

質問

クラスをモデリングする場合、どのような方法で初期化するのが望ましいですか。

  1. コンストラクタ、または
  2. ファクトリーメソッド

また、そのどちらを使う場合の注意点は何でしょうか?

状況によっては、オブジェクトを構築できない場合はnullを返すファクトリーメソッドを用意したほうがいい場合もありますね。これだと、コードがすっきりします。コンストラクターから例外をスローするのとは対照的に、別のアクションを起こす前に、返された値がヌルでないかどうかをチェックするだけでよいのです。(私は個人的に例外が好きではありません)。

例えば、あるクラスのコンストラクタがあり、id値を期待するとします。コンストラクタはこの値を使用して、データベースからクラスにデータを入力します。指定された ID を持つレコードが存在しない場合、コンストラクタは RecordNotFoundException をスローします。この場合、このようなクラスの構築はすべて try..catch ブロックで囲む必要があります。

これとは対照的に、これらのクラスに静的なファクトリーメソッドを用意して、レコードが見つからなかったらnullを返すようにすることができます。

この場合、コンストラクタとファクトリメソッド、どちらのアプローチが良いのでしょうか?

どのように解決するのですか?

の108ページより デザインパターン。再利用可能なオブジェクト指向ソフトウェアの要素 Gamma, Helm, Johnson, and Vlissides著。

Factory Methodパターンは、以下のような場合に使用します。

  • クラスが作成しなければならないオブジェクトのクラスを予測できない場合。
  • クラスは、そのサブクラスが作成するオブジェクトを指定することを望んでいます。
  • クラスが複数のヘルパーサブクラスのうちのひとつに責任を委譲しており、 どのヘルパーサブクラスが委譲元であるかという知識をローカライズしたい場合。