這篇文章介紹的內容是關於PHP設計模式之抽象工廠 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
在學習過Factory 方法之後,我所瞭解的Factory 方法基本是去建立一個對象,
例如在玩遊戲的時候,建立了一個關羽英雄,一個張飛英雄這樣。
但是有時候程式設計時可能需要建立一組對象,這就出現了第二種建立型設計模式--抽象Factory 方法(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();
輸出的結果:
-----------------建立第一個英雄-----------------
關羽加入戰場-->手持青龍偃月刀-->腳蹬赤兔馬。
-----------------建立第二個英雄-----------------
劉備加入戰場-->手持雌雄雙劍-->腳蹬的盧馬。