這篇文章介紹的內容是關於PHP設計模式之抽象工廠,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
在學習過工廠方法之後,我所了解的工廠方法基本上是去創建一個對象,
例如在玩遊戲的時候,創建了一個關羽英雄,一個張飛英雄這樣。
但是有時候程式設計時可能需要建立一組對象,這就出現了第二種建立型設計模式--#抽象工廠方法(AbstractFactory)。
比方說,我在創建關羽的時候手上拿著青龍偃月刀,騎著赤兔馬。
在創建劉備的時候手上拿著雌雄雙劍,騎著的盧馬。
那麼他們的兵器就需要一個類別去實現,馬又需要另一個類別去實現。
人物 兵器 坐騎 就成了一個組合。
最後透過一個抽象工廠的模式去實現組合創建。
記錄程式碼如下:
<?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();
#輸出的結果:
#-------------- ---創建第一個英雄----------------
關羽加入戰場-->手持青龍偃月刀-->腳蹬赤兔馬。
-----------------建立第二個英雄-----------------
劉備加入戰場-->手持雌雄雙劍-->腳蹬的盧馬。
相關推薦:
以上是PHP設計模式之抽象工廠的詳細內容。更多資訊請關注PHP中文網其他相關文章!