国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php設(shè)計(jì)模式 抽象工廠模式

2020-03-22 20:20:59
字體:
供稿:網(wǎng)友
  • 在學(xué)習(xí)本章之前,請先閱讀簡單工廠模式以及工廠方法模式

    在什么情況下應(yīng)當(dāng)使用抽象工廠模式:
    1、一個(gè)系統(tǒng)不應(yīng)當(dāng)依賴于產(chǎn)品類實(shí)例如何被創(chuàng)建、組合和表達(dá)的細(xì)節(jié),這對于所有的形態(tài)的工廠模式都是重要的。
    2、這個(gè)系統(tǒng)的產(chǎn)品有多余一個(gè)的產(chǎn)品族,而系統(tǒng)只消費(fèi)其中某一個(gè)族的產(chǎn)品。
    3、同屬于同一個(gè)產(chǎn)品族的產(chǎn)品是在一起使用的,這一約束必須在系統(tǒng)的設(shè)計(jì)中體現(xiàn)出來。
    4、系統(tǒng)提供一個(gè)產(chǎn)品類的庫,所有的產(chǎn)品以同樣的接口出現(xiàn),從而使客戶端不依賴于實(shí)現(xiàn)。


    案例1:
    還是以農(nóng)場為例。
    我們的農(nóng)場分了多個(gè)產(chǎn)品線,一個(gè)是專門賣北方的蔬菜水果。一個(gè)專門賣南方的蔬菜水果。大家可以試著不寫一下,這里就不給出示例了,uml類圖大家可以試著畫一下。


    案例2:
    電腦為例
    電腦分為PC電腦,mac電腦。pc電腦有他組裝需要的cpu、主板、鍵盤 | mac電腦同樣需要這些組件,但是型號不一樣,下面是此示例的uml類圖。

    代碼示例:

    此示例是依據(jù)女媧造人而寫的。

      1 <?php  2   3 //此實(shí)例是根據(jù)女媧造人寫的  4   5 //首先定義一個(gè)全局的工廠接口  6 //由陰繩 陽繩來繼承 都要實(shí)現(xiàn)舉繩子這個(gè)方法  7 interface nvwaRope{  8     html' target='_blank'>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 //定義一個(gè)人的抽象接口 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 //定義一個(gè)動(dòng)物的抽象接口 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 //定義一個(gè)母動(dòng)物的類101 class muAnimal extends abstractAnimal{102     public $xingbie = "mu";103 }104 105 106 //定義一個(gè)公動(dòng)物的類107 class gongAnimal extends abstractAnimal{108     public $xingbie = "gong";109 }110 111 112 113 //使用方式114 115 //首先獲取工廠的實(shí)例 也就是陰繩或者陽繩的實(shí)例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();
    PHP編程

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 天水市| 屏南县| 邵阳县| 柳林县| 密山市| 吐鲁番市| 斗六市| 论坛| 寿光市| 岚皋县| 清苑县| 信阳市| 唐山市| 安泽县| 鄯善县| 宁远县| 博客| 军事| 潍坊市| 石渠县| 扶余县| 阆中市| 商南县| 靖远县| 平定县| 曲周县| 尚义县| 泾源县| 个旧市| 五大连池市| 新安县| 鄯善县| 安塞县| 左贡县| 珠海市| 乳源| 永寿县| 准格尔旗| 瑞安市| 宿迁市| 明溪县|