ホームページ >バックエンド開発 >PHPチュートリアル >PHP デザイン パターン - Abstract Factory_PHP チュートリアル
以前に単純なファクトリとファクトリ メソッドの設計パターンを紹介しました。今日は最後のファクトリである抽象ファクトリを学びます。
ケース: 女の子を追いかけるとき、マクドナルドに行ったら、ウェイターに「B セット 2 つ」と言ってください。マクドナルドは、パッケージ B の抽象工場です。パッケージ B には、ハンバーガー、手羽先、飲み物が含まれています。マクドナルドまたは KFC は、パッケージ B の仕様に従って、パッケージ B に対応する材料を生産します。
抽象ファクトリ パターン: 特定のクラスを指定せずに、一連の関連オブジェクトまたは相互依存オブジェクトを作成するためのインターフェイスを提供します。クライアント クラスとファクトリ クラスは分離されています。消費者が特定の製品セットを必要とするときは、抽象ファクトリーにそれを要求するだけで済みます。抽象工場は、製品セットの仕様を満たす製品を特定の工場に生産します。
UML クラス図の実装:
UML クラス図のコード実装:
リーリー
リーリー
各抽象製品に複数の具体的なサブクラスがある場合、ファクトリの役割はどのサブクラスをインスタンス化するかをどのようにして知るのでしょうか?たとえば、各抽象製品の役割には 2 つの具体的な製品があります。抽象ファクトリ パターンは、これら 2 つの特定の製品ロールに対応する 2 つの特定のファクトリ ロールを提供します。各特定のファクトリ ロールは、特定の製品ロールのインスタンス化のみを担当します。各具象ファクトリ クラスは、抽象製品の特定のサブクラスのインスタンスを作成することのみを担当します。
該当するシナリオ:
1. 道路(インターフェース)、家、パイプなど、ゲーム開発におけるマルチスタイルの一連のシーン(パッケージ)。
2. システムは Windows、Linux、Android などの 3 つの異なるプラットフォームで実行する必要があります。どのように設計しますか?抽象ファクトリ パターンは、アプリケーションに対するオペレーティング システムの影響を防ぐために使用されます。 3 つの異なるオペレーティング システム上のソフトウェア機能、アプリケーション ロジック、および UI は非常に似ています。唯一の違いは、異なるファクトリ メソッドが呼び出され、異なる製品クラスがオペレーティング システムと対話する情報を処理することです。
3. 作成する必要があるオブジェクトが一連の相互関連または相互依存する製品ファミリーである場合、抽象ファクトリー パターンを使用できます。
1. 3 つは形式と特性が非常に似ており、最終的な目標は分離です。オブジェクト作成プロセスをカプセル化して、クライアントがオブジェクトの作成方法を気にせずにオブジェクトを直接取得できるようにします。
2.比較
ファクトリ メソッド パターン: 複雑なオブジェクトの作成に使用されます。 (アラカルト料理)
抽象ファクトリー パターン: 関連するまたは相互依存する複雑なオブジェクトのセットを作成するために使用されます。 (定食を買う)
ファクトリーメソッド作成では通常、製品を作成するメソッドが 1 つだけあります。抽象ファクトリーには通常、一連の製品を作成するための複数の方法があります。
パターンがファクトリ メソッド パターンであるか抽象ファクトリ パターンであるかについて心配する必要はありません。これらの間の進化はしばしば混乱を招くためです。ファクトリ メソッド パターンは、新しい要求が来たときに使用されるのは当然ですが、クラス内のプロダクトは異なる階層構造のプロダクト ファミリを構成するため、少し変更され、新しいメソッドが追加されます。これは、抽象化されたファクトリ パターンになります。 、提供される製品が製品ファミリーを構成しないように 1 つのメソッドが削減されると、それはファクトリー メソッド パターンに進化します。