基本的な定義
ファクトリメソッドパターンはオブジェクトを作成するためのインターフェースを定義しますが、サブクラスはインスタンス化するクラスを決定します。ファクトリメソッドパターンは、インスタンス化をサブクラスに委ねます。
パターン構造
製品:抽象製品。これらの製品を使用するクラスが両方ともこのインターフェースを参照できるように、すべての製品はこの共通インターフェースを実装する必要があります。
ConcreteProduct:特定の製品。
作成者:抽象ファクトリー。製品を操作するすべてのメソッドを実装しますが、ファクトリメソッドは実装しません。Creatorのすべてのサブクラスは、factoryMethod()メソッドを実装する必要があります。
ConcreteCreator:コンクリート工場。製品を製造する実際の工場。1つ以上の特定の製品の作成を担当します。
モードの実現:
製品概要製品
コンクリート製品
ファクトリ抽象ファクトリクラス
コンクリート工場
テストクラス
実行結果
09:46:41.447 [メイン] INFOcom.yanyuan.gof.build.factory.v2.HuaweiPhone-Huawei電話でDiao Chanにダイヤル
09:46:41.463 [メイン] INFOcom.yanyuan.gof.build.factory.v2.IPhone-iPhone電話がXiaoqiaoを呼び出す
長所と短所
アドバンテージ
ファクトリメソッドでは、ユーザーは目的の製品の特定のファクトリを知るだけでよく、特定の作成プロセスや特定の製品クラスの名前に関連する必要はありません。
システムに新しい製品を追加する場合、特定の製品カテゴリと実装ファクトリを追加するだけで、元のファクトリを変更する必要がなく、「開閉の原則」に準拠しています。
短所
製品を追加するたびに、ファクトリを実現するために特定のクラスとオブジェクトを追加する必要があります。システム内のクラスの数は指数関数的に増加し、システムの複雑さがある程度増加し、特定のクラスの依存関係も増加します
まとめ
ファクトリーメソッドモデルは「開閉原理」に完全準拠
ファクトリメソッドパターンは継承を使用してオブジェクトをサブクラスに委任し、サブクラスを通じてファクトリメソッドを実装してオブジェクトを作成します
ファクトリメソッドパターンでは、通常、作成者は抽象化に依存する製品コードを含み、これらの抽象製品はサブクラスによって作成されます。作成者は、作成する特定の製品を知る必要はありません。