[解決済み】コンストラクターとファクトリーメソッドの比較【終了しました
2022-04-16 19:47:51
質問
クラスをモデリングする場合、どのような方法で初期化するのが望ましいですか。
- コンストラクタ、または
- ファクトリーメソッド
また、そのどちらを使う場合の注意点は何でしょうか?
状況によっては、オブジェクトを構築できない場合はnullを返すファクトリーメソッドを用意したほうがいい場合もありますね。これだと、コードがすっきりします。コンストラクターから例外をスローするのとは対照的に、別のアクションを起こす前に、返された値がヌルでないかどうかをチェックするだけでよいのです。(私は個人的に例外が好きではありません)。
例えば、あるクラスのコンストラクタがあり、id値を期待するとします。コンストラクタはこの値を使用して、データベースからクラスにデータを入力します。指定された ID を持つレコードが存在しない場合、コンストラクタは RecordNotFoundException をスローします。この場合、このようなクラスの構築はすべて try..catch ブロックで囲む必要があります。
これとは対照的に、これらのクラスに静的なファクトリーメソッドを用意して、レコードが見つからなかったらnullを返すようにすることができます。
この場合、コンストラクタとファクトリメソッド、どちらのアプローチが良いのでしょうか?
どのように解決するのですか?
の108ページより デザインパターン。再利用可能なオブジェクト指向ソフトウェアの要素 Gamma, Helm, Johnson, and Vlissides著。
Factory Methodパターンは、以下のような場合に使用します。
- クラスが作成しなければならないオブジェクトのクラスを予測できない場合。
- クラスは、そのサブクラスが作成するオブジェクトを指定することを望んでいます。
- クラスが複数のヘルパーサブクラスのうちのひとつに責任を委譲しており、 どのヘルパーサブクラスが委譲元であるかという知識をローカライズしたい場合。
関連
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] 関数型プログラミングとオブジェクト指向プログラミングの比較【終了しました
-
[解決済み] コヒーシ ョンとカップリングの違い
-
[解決済み] JavaScriptのプライベートメソッド
-
[解決済み] 抽象クラスの代わりにインターフェイスを使用する場合とその逆は?
-
[解決済み] JavaScriptオブジェクトのコンストラクタ
-
[解決済み】依存関係逆転の原則とは何ですか、なぜそれが重要なのですか?
-
[解決済み】コンストラクターとファクトリーメソッドの比較【終了しました
-
[解決済み] 実装ではなくインターフェースにプログラムする」とはどういう意味ですか?
-
[解決済み] 継承と集計の比較【終了しました
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] 関数型プログラミングとオブジェクト指向プログラミングの比較【終了しました
-
[解決済み] コヒーシ ョンとカップリングの違い
-
[解決済み】静的ファクトリーメソッドとは何ですか?
-
[解決済み】「結合度が低く、結合度が高い」とはどういう意味ですか?
-
[解決済み】コンストラクターとファクトリーメソッドの比較【終了しました
-
[解決済み] 継承と集計の比較【終了しました
-
[解決済み] オブジェクト指向分析・設計によるエレベータのモデル化 [終了しました]
-
[解決済み] コンストラクタをprivateにするとどうなるのですか?
-
[解決済み] オブジェクト指向プログラミングにおける「インターフェイス」の定義とは?