1. ホーム
  2. design-patterns

[解決済み] デザインパターン 抽象ファクトリーとファクトリーメソッド

2022-06-01 02:44:01

質問

注:質問は記事の最後にあります。

に関する他のstackoverflowのスレッドを読みました。 抽象ファクトリ vs ファクトリメソッド . 私はそれぞれのパターンの意図を理解しています。しかし、定義がよくわかりません。

ファクトリーメソッドは、オブジェクトを作成するためのインターフェイスを定義する オブジェクトを作成するためのインターフェイスを定義しますが サブクラスはそのうちのどれをインスタンス化するかを決定します。 を決めることができます。ファクトリーメソッドにより クラスはインスタンス化を ファクトリーメソッドにより、クラスはインスタンス化をサブクラスに委ねることができます。

対照的に、抽象ファクトリー を作成するためのインターフェイスを提供します。 関連する、あるいは依存するオブジェクトの オブジェクトのファミリーを作成するためのインターフェイスを提供します。 具体的なクラスを指定することなく

- ジョン・フェミネラ

この 抽象ファクトリー と非常によく似ています。 ファクトリーメソッド . 私は私のポイントを説明するために、いくつかのUMLクラスを描きました。

注意してください。

  • 図は www.yuml.com から引用したもので、完璧な方向性を持っているわけではありません。しかし、それは無料のサービスです :)。
  • 図は完璧ではないかもしれません。私はまだ GoF デザインパターンを学んでいるところです。

ファクトリーメソッドです。

抽象ファクトリー(メンバー1名のみ)。

抽象ファクトリー(メンバー増)。

質問です。

  1. もし 抽象ファクトリ が 1 人の作成者と 1 つの製品しか持っていない場合、それはやはり 抽象ファクトリー パターンなのでしょうか? (ファミリーを作成するためのインターフェース)
  2. を使用することができます。 ファクトリーメソッド の具体的な作成者はインターフェースから作成することができますか、それともクラスからでなければなりませんか? (クラスはインスタンス化をサブクラスに委ねる)
  3. 抽象ファクトリーが1人の作成者と1つの製品しか持てない場合、その差は 抽象ファクトリー ファクトリーメソッド の2つがあり、前者の作成者はインターフェース、後者の作成者はクラスであると?

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

これが役立つことを願っています。様々なタイプのファクトリーが説明されています。私は ヘッドファーストデザインパターン を参考にしました。私が使ったのは yuml.me を図にしました。

静的ファクトリー

Productの様々なサブタイプを生成するためのStatic Methodを持つクラスです。

簡易工場

様々なサブタイプのProductを生成することができるクラスです。(Static Factoryよりも優れています。新しい型が追加されても、ベースとなるProductクラスを変更する必要がなく、Simple Factoryクラスだけが変更される)

ファクトリーメソッド

型に関連する1種類の製品を生成するためのメソッドを1つ含む。(型がサブクラスに繰り下げられるので、シンプルファクトリーより優れています)。

抽象ファクトリー

関連する型のファミリーを生成します。生成する型に複数のメソッドがあるため、ファクトリーメソッドとは明らかに異なります。(これは複雑で、より良い実例のために次の図を参照してください)。

.NET Frameworkの例

DbFactoriesProviderはサブタイプを持たないので、シンプルなファクトリです。DbFactoryProviderは、接続やコマンドオブジェクトなど、様々な関連するデータベースオブジェクトを作成できるため、抽象的なファクトリです。