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

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

不言
不言オリジナル
2018-04-18 11:39:371802ブラウズ

この記事では、一定の参考価値のあるPHPデザインパターンの抽象ファクトリーを紹介しますので、困っている友達に参考にしてもらいましょう

ファクトリーメソッドを学んだ後、私が理解したものは次のとおりです。たとえば、ゲームをプレイするときに、関羽の英雄と張飛の英雄が作成されます。
しかし、プログラムの設計中にオブジェクトのセットを作成する必要がある場合があり、これが 2 番目の創造的な設計パターンである

Abstract Factory Method (AbstractFactory) につながります。 たとえば、私が関羽を作成したとき、私は青龍燕越剣を持ち、赤いウサギの馬に乗っていました。
劉備が誕生したとき、彼は雄剣と雌剣の両方を手に持ち、馬に乗りました。
次に、武器には 1 つのクラスを実装する必要があり、馬には別のクラスを実装する必要があります。
キャラクター+武器+マウントの組み合わせになります。
最後に、組み合わせの作成は、抽象ファクトリー パターンを通じて実現されます。

レコードコードは次のとおりです:

<?php    

  
/** Hero 
 *  定义一个英雄接口 
 */  
interface Hero  
{  
    function CreateHero();  
}  
  
/** GuanYu 
 *  关羽英雄类 
 */  
Class GuanYu implements Hero  
{  
    function CreateHero()  
    {  
         echo "关羽加入战场-->";  
    }   
}  
  
/** LiuBei 
 *  刘备英雄类 
 */  
Class LiuBei implements Hero  
{  
    function CreateHero()  
    {  
         echo "刘备加入战场-->";         
    }  
}  
  
  
/** Weapon 
 *  定义一个兵器接口 
 */  
interface Weapon  
{  
    function CreateWeapon();  
}  
  
/** GuanYuWeapon 
 *  青龙偃月刀的类 
 */  
Class GuanYuWeapon implements Weapon  
{  
    function CreateWeapon()  
    {  
        echo "手持青龙偃月刀-->";         
    }  
}  
  
/** LiuBeiWeapon 
 *  雌雄双剑的类 
 */  
Class LiuBeiWeapon implements Weapon  
{  
    function CreateWeapon()  
    {  
        echo "手持雌雄双剑-->";          
    }  
}  
  
  
/** Horse 
 *  定义一个坐骑接口 
 */  
interface Horse  
{  
    function CreateHorse();  
}  
  
/** ChiTu 
 *  赤兔马类 
 */  
Class ChiTu implements Horse  
{  
    function CreateHorse()  
    {  
        echo "脚蹬赤兔马。";    
    }  
}  
  
/** DiLu 
 *  的卢马类 
 */  
Class DiLu implements Horse  
{  
    function CreateHorse()  
    {  
        echo "脚蹬的卢马。";    
    }     
}  
  
/** AbstractFactory 
 *  抽象工厂接口  为子类建立标准 
 *  LoadingHero   加载人物类方法 
 *  LoadingWeapon 加载武器类方法 
 *  LoadingHorse  加载坐骑类方法 
 */  
interface AbstractFactory  
{  
    function LoadingHero();  
    function LoadingWeapon();  
    function LoadingHorse();  
}  
  
/** GFactory 
 *  关羽英雄创建工厂类  用于客户端调用 
 */  
Class GFactory implements AbstractFactory  
{  
    function LoadingHero()  
    {  
        return new GuanYu();  
    }  
    function LoadingWeapon()  
    {  
        return new GuanYuWeapon();  
    }  
    function LoadingHorse()  
    {  
        return new ChiTu();  
    }          
}  
  
/** LFactory 
 *  刘备英雄创建工厂类  用于客户端调用 
 */  
Class LFactory implements AbstractFactory  
{  
    function LoadingHero()  
    {  
        return new LiuBei();  
    }  
    function LoadingWeapon()  
    {  
        return new LiuBeiWeapon();  
    }  
    function LoadingHorse()  
    {  
        return new DiLu();  
    }     
}
<?php   
  
// 抽象工厂模式  index.php    
header("Content-Type:text/html;charset=utf-8");  
  
require_once "AbstractFactory.php";  
  
echo "-----------------创建第一个英雄-----------------<br/>";  
$GY = new GFactory(); // 调用第一个英雄的工厂  
  
// 加载各自的创建方法  
$GYHero = $GY->LoadingHero();  
$GYWeapon = $GY->LoadingWeapon();  
$GYHorse = $GY->LoadingHorse();  
  
// 生成加入战场  
$GYHero->CreateHero();  
$GYWeapon->CreateWeapon();  
$GYHorse->CreateHorse();  
  
echo "<br/>";  
  
echo "-----------------创建第二个英雄-----------------<br/>";  
$LB = new LFactory(); // 调用第一个英雄的工厂  
  
// 加载各自的创建方法  
$LBHero = $LB->LoadingHero();  
$LBWeapon = $LB->LoadingWeapon();  
$LBHorse = $LB->LoadingHorse();  
  
// 生成加入战场  
$LBHero->CreateHero();  
$LBWeapon->CreateWeapon();  
$LBHorse->CreateHorse();

出力結果:

------最初のヒーローを作成します------ -- -------

関羽が戦場に参加 -- > Qinglong Yanyue Sword を手に -- > Red Rabbit Horse を漕ぐ。
-----------------2人目の英雄を作成---------------
劉備が戦場に参加- - > 雄剣と雌剣の両方を保持 - > ペダルを備えたルマ。
関連する推奨事項:


PHP デザイン パターン ファクトリ メソッド

PHP デザイン パターン シンプル ファクトリ


以上がPHP デザイン パターン抽象ファクトリーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。