[解決済み] デザインパターン 抽象ファクトリーとファクトリーメソッド
質問
注:質問は記事の最後にあります。
に関する他のstackoverflowのスレッドを読みました。 抽象ファクトリ vs ファクトリメソッド . 私はそれぞれのパターンの意図を理解しています。しかし、定義がよくわかりません。
ファクトリーメソッドは、オブジェクトを作成するためのインターフェイスを定義する オブジェクトを作成するためのインターフェイスを定義しますが サブクラスはそのうちのどれをインスタンス化するかを決定します。 を決めることができます。ファクトリーメソッドにより クラスはインスタンス化を ファクトリーメソッドにより、クラスはインスタンス化をサブクラスに委ねることができます。
対照的に、抽象ファクトリー を作成するためのインターフェイスを提供します。 関連する、あるいは依存するオブジェクトの オブジェクトのファミリーを作成するためのインターフェイスを提供します。 具体的なクラスを指定することなく
この 抽象ファクトリー と非常によく似ています。 ファクトリーメソッド . 私は私のポイントを説明するために、いくつかのUMLクラスを描きました。
注意してください。
- 図は www.yuml.com から引用したもので、完璧な方向性を持っているわけではありません。しかし、それは無料のサービスです :)。
- 図は完璧ではないかもしれません。私はまだ GoF デザインパターンを学んでいるところです。
ファクトリーメソッドです。
抽象ファクトリー(メンバー1名のみ)。
抽象ファクトリー(メンバー増)。
質問です。
- もし 抽象ファクトリ が 1 人の作成者と 1 つの製品しか持っていない場合、それはやはり 抽象ファクトリー パターンなのでしょうか? (ファミリーを作成するためのインターフェース)
- を使用することができます。 ファクトリーメソッド の具体的な作成者はインターフェースから作成することができますか、それともクラスからでなければなりませんか? (クラスはインスタンス化をサブクラスに委ねる)
- 抽象ファクトリーが1人の作成者と1つの製品しか持てない場合、その差は 抽象ファクトリー と ファクトリーメソッド の2つがあり、前者の作成者はインターフェース、後者の作成者はクラスであると?
どのように解決するのですか?
これが役立つことを願っています。様々なタイプのファクトリーが説明されています。私は ヘッドファーストデザインパターン を参考にしました。私が使ったのは yuml.me を図にしました。
静的ファクトリー
Productの様々なサブタイプを生成するためのStatic Methodを持つクラスです。
簡易工場
様々なサブタイプのProductを生成することができるクラスです。(Static Factoryよりも優れています。新しい型が追加されても、ベースとなるProductクラスを変更する必要がなく、Simple Factoryクラスだけが変更される)
ファクトリーメソッド
型に関連する1種類の製品を生成するためのメソッドを1つ含む。(型がサブクラスに繰り下げられるので、シンプルファクトリーより優れています)。
抽象ファクトリー
関連する型のファミリーを生成します。生成する型に複数のメソッドがあるため、ファクトリーメソッドとは明らかに異なります。(これは複雑で、より良い実例のために次の図を参照してください)。
.NET Frameworkの例
DbFactoriesProviderはサブタイプを持たないので、シンプルなファクトリです。DbFactoryProviderは、接続やコマンドオブジェクトなど、様々な関連するデータベースオブジェクトを作成できるため、抽象的なファクトリです。
関連
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] Abstract FactoryとFactoryのデザインパターンの違いは何ですか?
-
[解決済み] アグリゲート・ルートって何?
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
-
[解決済み】ラッパークラスとは何ですか?
-
[解決済み】インターフェイスを作成するタイミングはどのように判断するのでしょうか?
-
[解決済み] KotlinでBuilderパターンを実装するには?
-
[解決済み] デザインパターンとアーキテクチャパターンの違いは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Abstract FactoryとFactoryのデザインパターンの違いは何ですか?
-
[解決済み】クラスの命名 - すべてを"<WhatEver>Manager "と呼ぶのを避けるには?[クローズド]
-
[解決済み】FactoryとAbstract Factoryのデザインパターンの基本的な違いは何ですか?[クローズド]
-
[解決済み】アンチパターンとは何ですか?
-
[解決済み】ラッパークラスとは何ですか?
-
[解決済み] コード内のスイッチをなくす方法【非公開
-
[解決済み] Observerデザインパターンと "Listeners "の比較
-
[解決済み] リポジトリとサービスの違い?
-
[解決済み] ゲームにおけるリプレイの概念的な仕組みについて教えてください。
-
[解決済み] デザインパターン 抽象ファクトリーとファクトリーメソッド