1. 程式人生 > >設計模式:工廠模式

設計模式:工廠模式

ide 通用 指定 turn IT left func dep cif

一、工廠方法模式

  工廠方法模式。定義為:Define an interface for creating an object,but let subclasses decide which class toinstantiate.Factory Method lets a class defer instantiation to subclasses.(定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。)

技術分享圖片

工廠模式通用類圖

<?php
   interface  zoon {
           function introduce();
   }

   
class dog implements zoon{ function introduce(){ echo "我是小狗,我汪汪汪叫" . PHP_EOL; } } class pig implements zoon{ function introduce(){ echo "我是小豬,我哼哼哼叫" . PHP_EOL; } } class sheep implements zoon{ function
introduce(){ echo "我是小羊,我咩咩咩叫" . PHP_EOL; } } interface createZoon{ function create(); } class FactoryDod implements createZoon{ function create(){ return new dog(); } } class FactoryPig implements
createZoon{ function create(){ return new pig(); } } class FactorySheep implements createZoon{ function create(){ return new sheep(); } } class Factory{ function __construct(){ $d = new FactoryDod(); $d->create()->introduce(); $p = new FactoryPig(); $d->create()->introduce(); $s = new Factorysheep(); $s->create()->introduce(); } } $t = new Factory();

 

 二、簡單工廠模式

    

<?php
   interface  zoon {
           function introduce();
   }

   class dog implements zoon{
           function introduce(){
            echo "我是小狗,我汪汪汪叫" . PHP_EOL;
        }
   }

   class pig implements zoon{
           function introduce(){
            echo "我是小豬,我哼哼哼叫" . PHP_EOL;
        }
   }

   class sheep implements zoon{
           function introduce(){
            echo "我是小羊,我咩咩咩叫" . PHP_EOL;
        }
   }
  
   class  FactoryDod {
      static function create(){
               return new dog();
       }
           
   }

   class  FactoryPig{
       static function  create(){
               return new pig();
       }
   }


   class FactorySheep{
       static  function  create(){
               return new sheep();
       }
   }


  class Factory{
          function __construct(){
            $d = FactoryDod::create();
            $d->introduce();
      
            $p = FactoryPig::create();
            $d->introduce();
      
            $s = Factorysheep::create();
            $s->introduce();
        }
  }

  $t = new Factory();

三、抽象工廠模式

  抽象工廠模式(Abstract Factory Pattern)定義:Provide an interface for creating families of related or dependent objects without specifyingtheir concrete classes.(為創建一組相關或相互依賴的對象提供一個接口,而且無須指定它們的具體類。)

<?php
    interface Human {
        function getColor();
        function talk();
        function getSex();
    }

    abstract class abstractWhiteHuman implements Human{
        public function getColor(){
            echo "皮膚顏色:白色" . PHP_EOL;
        }
        
        public function talk(){
            echo "語言:白人語言" . PHP_EOL;
        }
    }

    abstract class abstractBlackHuman implements Human{
        public function getColor(){
            echo "皮膚顏色:黑色" . PHP_EOL;
        }
        
        public function talk(){
            echo "語言:黑人語言" . PHP_EOL;
        }
    }

    abstract class abstractYellowHuman implements Human{
        public function getColor(){
            echo "皮膚顏色:黃色" . PHP_EOL;
        }
        
        public function talk(){
            echo "語言:黃人語言" . PHP_EOL;
        }
    }

    class FemaleYellowHuman extends abstractYellowHuman{
        function getSex(){
            echo "性別:女性" . PHP_EOL;
        }
    }

    class MaleYellowHuman extends abstractYellowHuman{
        function getSex(){
            echo "性別:男性" . PHP_EOL;
        }
    }
    

    class MaleBlackHuman extends abstractYellowHuman{
        public function getSex(){
            echo "性別:男性" . PHP_EOL;
        }
    }
    
    class MaleWhiteHuman extends abstractYellowHuman{
        public function getSex(){
            echo "性別:男性" . PHP_EOL;
        }
    }

    interface HumanFactory{
        function createYellowHuman();
        function createWhiteHuman();
        function createBlackHuman();
    }

    class FemaleFactory implements HumanFactory{
        function createBlackHuman(){
            return new FemaleBlackHuman();
        }
        function createWhiteHuman(){
            return new FemaleWhiteHuman();
        }
        function createYellowHuman(){
            return new FemaleYellowHuman();
        }
    }

    class MaleFactory implements HumanFactory{
        function createBlackHuman(){
            return new MaleBlackHuman();
        }
        function createWhiteHuman(){
            return new MaleWhiteHuman();
        }
        function createYellowHuman(){
            return new MaleYellowHuman();
        }
    }

    class main{
        public function create(){
            $maleHumanFactory = new MaleFactory();
            $femaleHumanFactory = new FemaleFactory();
            $maleYellowHuman = $maleHumanFactory->createYellowHuman();
            $maleYellowHuman->getColor();
            $maleYellowHuman->talk();
            $maleYellowHuman->getSex();
        }
    }

    $t = new main();
    $t->create();
    

設計模式:工廠模式