php設計模式 — 抽象原廠模式

來源:互聯網
上載者:User
在什麼情況下應當使用抽象原廠模式:1、一個系統不應當依賴於產品類執行個體如何被建立、組合和表達的細節,這對於所有的形態的原廠模式都是重要的。2、這個系統的產品有多餘一個的產品族,而系統只消費其中某一個族的產品。3、同屬於同一個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。4、系統提供一個產品類的庫,所有的產品以同樣的介面出現,從而使用戶端不依賴於實現。  案例1:還是以農場為例。我們的農場分了多個產品線,一個是專門賣北方的蔬菜水果。一個專門賣南方的蔬菜水果。大家可以試著不寫一下,這裡就不給出樣本了,uml類圖大家可以試著畫一下。  案例2:以電腦為例電腦分為PC電腦,mac電腦。pc電腦有他組裝需要的cpu、主板、鍵盤 mac電腦同樣需要這些組件,但是型號不一樣,下面是此樣本的uml類圖。     程式碼範例: 此樣本是依據女媧造人而寫的。 複製代碼  1 <?php  2   3 //此執行個體是根據女媧造人寫的  4   5 //首先定義一個全域的工廠介面  6 //由陰繩 陽繩來繼承 都要實現舉繩子這個方法  7 interface nvwaRope{  8     public function liftPeopleRope($name);  9     public function liftAnimalRope($name); 10 } 11  12 //定義陰繩 來繼承 nvwaRope 13 class yinRope implements nvwaRope{ 14     public function liftPeopleRope($name){ 15         return new girl($name); 16     } 17  18     public function liftAnimalRope($name){ 19         return new muAnimal($name); 20     } 21 } 22  23 //定義陽繩  24 class yangRope implements nvwaRope{ 25     public function liftPeopleRope($name){ 26         return new boy($name); 27     } 28  29     public function liftAnimalRope($name){ 30         return new gongAnimal($name); 31     } 32 } 33  34  35 //定義一個人的抽象介面 36 interface people{ 37     public function eat(); 38     public function getName(); 39 } 40  41  42 abstract class abstractPeople implements people{ 43     private $name; 44  45     public function __construct($name){ 46         $this->name = $name; 47     } 48  49     public function eat(){ 50         echo $this->name . " eat"; 51     } 52  53     public function getName(){ 54         echo $this->name; 55         return $this->name; 56     } 57  58     //檢查是否有胸 59     public function checkChest(){ 60         return $this->haveChest; 61     } 62 } 63  64 class boy extends abstractPeople{ 65     public $haveChest = false; //男孩沒有胸 66 } 67  68 class girl extends abstractPeople{ 69     public $haveChest = true; //女孩有胸 70 } 71  72  73 //定義一個動物的抽象介面 74 interface animal{ 75     public function eat(); 76     public function sleep(); 77 } 78  79 abstract class abstractAnimal implements animal{ 80     private $name; 81  82     public function __construct($name){ 83         $this->name = $name; 84     } 85  86     public function eat(){ 87         echo $this->name . " eating"; 88     } 89  90     public function sleep(){ 91         echo $this->name . " sleeping"; 92     } 93  94     public function getName(){ 95         echo $this->name; 96         return $this->name; 97     } 98 } 99 100 //定義一個母動物的類101 class muAnimal extends abstractAnimal{102     public $xingbie = "mu";103 }104 105 106 //定義一個公動物的類107 class gongAnimal extends abstractAnimal{108     public $xingbie = "gong";109 }110 111 112 113 //使用方式114 115 //首先擷取工廠的執行個體 也就是陰繩或者陽繩的執行個體116 $yinRope = new yinRope();117 118 $people = $yinRope->liftPeopleRope("zhangsan");119 echo $people->eat();120 echo $people->getName();121 var_dump($people->checkChest());122 123 $animel = $yinRope->liftAnimalRope("馬");124 echo $animel->eat();

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.