PHP設計模式之抽象工廠

來源:互聯網
上載者:User
這篇文章介紹的內容是關於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();

輸出的結果:

-----------------建立第一個英雄-----------------
關羽加入戰場-->手持青龍偃月刀-->腳蹬赤兔馬。
-----------------建立第二個英雄-----------------
劉備加入戰場-->手持雌雄雙劍-->腳蹬的盧馬。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.