ホームページ > バックエンド開発 > PHPチュートリアル > PHP デザイン パターン - 抽象ファクトリー

PHP デザイン パターン - 抽象ファクトリー

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-23 13:36:24
オリジナル
790 人が閲覧しました

免責事項: この一連のブログの参考資料は、Cheng Jie 著の「Dahua Design Pattern」です。


我们 先ほど簡単なファクトリーとファクトリーメソッドの設計モデルを紹介しましたが、今日は最後のファクトリー?? を学びます。




食べてください、マクドナルドに行ってくださいの場合は店員さんに「B定食を2つ」と言えばOKです。マクドナルドは、ハンバーガー、手羽先、飲み物を含むパッケージ B の AbstractFactory です。マクドナルドまたは KFC は、パッケージ B の仕様に従って、パッケージ B に対応する材料を生産するために、バーガー工場、手羽先工場、および飲料工場を使用します。 Abstract Factory Pattern: 具体的なクラスを指定せずに、一連の関連オブジェクトまたは相互依存オブジェクトを作成するためのインターフェイスを提供します。クライアント クラスとファクトリ クラスは分離されています。消費者が特定の製品セットを必要とするときは、抽象ファクトリーにそれを要求するだけで済みます。次に、抽象工場は、製品セットの仕様を満たす製品を特定の工場に生産します

<?php/** * Created by PhpStorm. * User: LYL * Date: 2015/4/19 * Time: 17:39 *///-----------------------产品------------------------/**抽象产品角色             充饥食物 * Interface IAllayFood */interface IAllayFood{    function Allay();}/**抽象产品角色            解渴食物 * Interface IDrinkFood */interface IDrinkFood{    function Drink();}/**具体产品角色           虾仁汉堡 * Class XiaRenHamb */class XiaRenHamb implements IAllayFood{    function Allay()    {        echo "虾仁汉堡充饥了。。。。。。。<br/>";    }}/**具体产品角色            鸡肉汉堡 * Class ChickenHamb */class ChickenHamb implements IAllayFood{    function Allay()    {        echo "鸡肉汉堡充饥了。。。。。。。<br/>";    }}/**具体产品角色             可口可乐 * Class KekouKele */class KekouKele implements IDrinkFood{    function Drink()    {        echo "可口可乐解渴了。。。。。。。。。<br/>";    }}/**具体产品角色             百事可乐 * Class BaishiKele */class BaishiKele implements IDrinkFood{    function Drink()    {        echo "百事可乐解渴了。。。。。。。。<br/>";    }}//-------------------抽象工厂---------------------/**顶层超级抽象工厂接口 * Interface IFactory */interface IFactory{    //得到充饥食物    function GetAllayFood();    //得到解渴食物    function GetDrinkFood();}/**工厂A              A套餐:虾仁汉堡+百事可乐 * Class IAFactory */class AFactory implements IFactory{    function GetAllayFood()    {        return new XiaRenHamb();    }    function GetDrinkFood()    {        return new BaishiKele();    }}/**工厂B                B套餐:鸡肉汉堡+可口可乐 * Class IBFactory */class BFactory implements IFactory{    function GetAllayFood()    {        return new ChickenHamb();    }    function GetDrinkFood()    {        return new KekouKele();    }}
ログイン後にコピー
クライアント テスト コード

Re r


header("Content-Type:text/html;charset=utf-8");//------------------------抽象工厂测试代码------------------require_once "./AbstractFactory/AbstractFactory.php";//------------------点套餐-------------$factoryA=new AFactory();$factoryB=new BFactory();//------------------麦当劳制作套餐食物------------//A套餐$allayA=$factoryA->GetAllayFood();$drinkA=$factoryA->GetDrinkFood();//B套餐$allayB=$factoryB->GetAllayFood();$drinkB=$factoryB->GetDrinkFood();//-------------------享受套餐---------------echo "享受A套餐:<br/>";$allayA->Allay();$drinkA->Drink();echo "享受B套餐:<br/>";$allayB->Allay();$drinkB->Drink();
ログイン後にコピー



各抽象積が複数の場合特定のサブクラス、ファクトリーキャラクターはどのサブクラスをどのようにして知るのでしょうか?たとえば、各抽象製品の役割には 2 つの具体的な製品があります。抽象ファクトリ パターンは、これら 2 つの特定の製品ロールに対応する 2 つの特定のファクトリ ロールを提供します。各特定のファクトリ ロールは、特定の製品ロールのインスタンス化のみを担当します。各具象ファクトリ クラスは、抽象製品の特定のサブクラスのインスタンスを作成することのみを担当します。

該当するシナリオ:

1. 道路 (インターフェース)、家、パイプなど、ゲーム開発におけるマルチスタイルの一連のシーン (パッケージ)。


2. システムは、Windows、Linux、Android などの 3 つの異なるプラットフォームで実行する必要があります。どのように設計しますか?抽象ファクトリ パターンは、アプリケーションに対するオペレーティング システムの影響を防ぐために使用されます。 3 つの異なるオペレーティング システム上のソフトウェア機能、アプリケーション ロジック、および UI は非常に似ています。唯一の違いは、異なるファクトリ メソッドが呼び出され、異なる製品クラスがオペレーティング システムと対話する情報を処理することです。

3. 作成する必要があるオブジェクトが、相互関連または相互依存する一連の製品ファミリーである場合、抽象ファクトリー パターンを使用できます。

3 つのファクトリー パターンの概要:

1. 3 つのタイプは形式と特性が非常に似ており、最終的な目標は分離です。オブジェクト作成プロセスをカプセル化して、クライアントがオブジェクトの作成方法を気にせずにオブジェクトを直接取得できるようにします。

2. 比較

ファクトリ メソッド パターン: 複雑なオブジェクトの作成に使用されます。 (a la carte food)は、抽象的な工場パターン:関連するまたは相互依存する複雑なオブジェクトのセットを作成するために使用されます。 (パッケージを購入する)

ファクトリメソッド作成では、通常、プロダクトを作成するメソッドは 1 つだけです。抽象ファクトリーには通常、一連の製品を作成するための複数の方法があります。


パターンがファクトリ メソッド パターンであるか抽象ファクトリ パターンであるかを気にする必要はありません。なぜなら、それらの間の進化はしばしば混乱を招くからです。ファクトリ メソッド パターンは、新しい要求が来たときに使用されるのは当然ですが、クラス内のプロダクトは異なる階層構造のプロダクト ファミリを構成するため、少し変更され、新しいメソッドが追加されます。これは、抽象化されたファクトリ パターンになります。 、提供される製品が製品ファミリーを構成しないように 1 つのメソッドが削減されると、それはファクトリー メソッド パターンに進化します。


PHP オブジェクト指向デザインパターン 🎜 🎜
関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート