- これらの 3 つのパターンは互いにどのように異なるのでしょうか。
Factory:インスタンス化ロジックをクライアントに公開せずにオブジェクトを作成します。
ファクトリ メソッド:オブジェクトを作成するためのインターフェイスを定義しますが、インスタンス化するクラスはサブクラスに決定させます。Factory メソッドにより、クラスはインスタンス化をサブクラスに任せることができます
抽象ファクトリ:具象クラスを指定せずに、関連オブジェクトまたは依存オブジェクトのファミリを作成するためのインターフェイスを提供します。
AbstractFactoryパターンは合成を使用してオブジェクトを作成する責任を別のクラスに委任しますが、Factory メソッド設計パターンは継承を使用し、派生クラスまたはサブクラスに依存してオブジェクトを作成します
- いつどれを使う?
ファクトリ:クライアントはクラスを必要とするだけで、どの具象実装を取得するかは気にしません。
ファクトリ メソッド:クライアントは、実行時に作成する必要がある具体的なクラスを知りませんが、ジョブを実行するクラスを取得したいだけです。
AbstactFactory: システムで複数の製品ファミリを作成する必要がある場合、または実装の詳細を公開せずに製品のライブラリを提供する必要がある場合。
抽象ファクトリ クラスは、多くの場合、ファクトリ メソッドで実装されます。ファクトリ メソッドは通常、テンプレート メソッド内で呼び出されます。
- また、可能であれば、これらのパターンに関連する Java の例はありますか?
ファクトリーとファクトリーメソッド
意図:
オブジェクトを作成するためのインターフェイスを定義しますが、インスタンス化するクラスはサブクラスに決定させます。Factory Method を使用すると、クラスはインスタンス化をサブクラスに任せることができます。
UML ダイアグラム:
Product: Factory メソッドが作成するオブジェクトのインターフェースを定義します。
ConcreteProduct: Product インターフェースを実装します
Creator: Factory メソッドを宣言します。
ConcreateCreator: Factory メソッドを実装して、ConcreteProduct のインスタンスを返します。
問題文: ゲーム インターフェイスを定義する Factory Methods を使用して、ゲームの Factory を作成します。
コードスニペット:
工場のパターン。ファクトリ メソッドを使用する場合
他の創造パターンとの比較:
設計はファクトリ メソッドを使用して開始し(複雑さが軽減され、カスタマイズ可能になり、サブクラスが急増) 、設計者が柔軟性が必要な場所を発見するにつれて、抽象ファクトリ、プロトタイプ、またはビルダー(より柔軟で複雑) に進化します。
抽象ファクトリクラスは多くの場合、ファクトリ メソッドで実装されますが、プロトタイプを使用して実装することもできます。
さらに読むための参考文献:ソースメイキングのデザインパターン