PHP物件導向-設計模式 單例模式 簡單原廠模式 Factory 方法模式

來源:互聯網
上載者:User

標籤:roi   instance   失敗   class   需要   限制   str   ati   const   

1.單例模式

  單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個執行個體。即一個類只有一個對象執行個體。

  要實現每一個類只有一個執行個體,就需要對執行個體化進行限制。

  單例模式實現要點: 

   ① 建構函式私人化,不允許使用new關鍵字建立對象
   ② 對外提供擷取對象的方法。在方法中判斷對象是否為空白,如果為空白則建立對象並返回,如果不為空白則直接返回
   ③ 執行個體對象的屬性以及擷取對象的方法必須是靜態
   ④ 之後,建立對象只能使用我們提供的靜態方法。 

 

  PHP實現單例模式代碼如下:

 1 class Singleton{ 2         static private $Single = null; 3          4         //建構函式私人化,不準使用new關鍵字建立對象 5         private function __construct(){} 6          7         static function getSingle(){ 8             if(!self::$Single){ 9 //                self::$Single = new Singleton();//new self();10                 self::$Single = new self();//和上面的語句等價 11                 //上述陳述式完成了在類中通過靜態方法建立對象並返回。12                 //self代指類名 new Singleton() 和new self()完全一樣;13             }14             return self::$Single;15         }16 }

  最後將其執行個體化,並且只能使用類中提供的方法。

    $singletonInstance = Singleton::getSingle();

 

  上述代碼中,使用私人的靜態變數和靜態方法,通過類的靜態方法建立執行個體,並且進行判斷,如果第一次進行執行個體化,則成功,否則執行個體化失敗。如此一來,每個類只有一個執行個體,因而實現了單例模式。

   

2.簡單原廠模式

  Factory 方法模式的意義是定義一個建立產品對象的工廠介面,將實際建立工作延遲到子類當中。核心工廠類不再負責產品的建立,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得Factory 方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。這樣可以讓程式耦合度降低,實現解耦。

  簡單原廠模式PHP代碼如下:

 1     interface Product{ 2         function productFunc(); 3     } 4      5     class Product1 implements Product{ 6         function productFunc(){ 7             echo "this is ProductA function"; 8         } 9     }10     11     class Product2 implements Product{12         function productFunc(){13             echo "this is ProductB function";14         }15     }16     17     class Factory{18         static function createPro($pro){19              switch ($pro) {20                  case ‘ProductA‘:21                      return new ProductA();22                      break;23                  case ‘ProductB‘:24                      return new ProductB();25                      break;26                 default:27                      break;28             }29         }30     }31     32     $proInstance1 = Factory::createPro("ProductA");33     $proInstance2 = Factory::createPro("ProductB");    34     $proInstance1->productFunc();35     $proInstance2->productFunc();

 

 

 

 3.Factory 方法模式

  在原有的簡單原廠模式的基礎上,我們將工廠類也抽象出來,讓工廠的子類去完成具體的工作。

  Factory 方法模式的PHP代碼如下:

 1 interface Product{ 2         function productFunc(); 3     } 4      5     class Product1 implements Product{ 6         function productFunc(){ 7             echo "this is ProductA function"; 8         } 9     }10     11     class Product2 implements Product{12         function productFunc(){13             echo "this is ProductB function";14         }15     }16     17     //將工廠抽象出來,生產不同產品的具體功能交給他的子類完成18     interface Factory{19         function create();20     }21     22     //子類工廠A生產產品123     class FactoryA implements Factory(){24         static function create(){25             echo "this factory create ProductA";26             return new Product1();27         }28     }29     //子類工廠B生產產品230     class FactoryB implements Factory(){31         static function create(){32             echo "this factory create ProductB";33             return new Product2();34         }35     }36     37     $pro1 = FactoryA::create();38     $pro2 = FactoryB::create();    39     $pro1->productFunc();40     $pro2->productFunc();

 

  

  以上為單裡模式,簡單原廠模式,Factory 方法模式,的簡單,後期還會在此更新其他的設計模式。(未完待續)

 

PHP物件導向-設計模式 單例模式 簡單原廠模式 Factory 方法模式

聯繫我們

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