php設計模式

整體來講設計模式分爲三大類:php

  1. 建立型模式---共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
  2. 結構型模式---共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
  3. 行爲型模式---共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式

下面,簡單介紹幾種設計模式:設計模式

單例模式this

  • 單例模式,是一種經常使用的軟件設計模式。在它的核心結構中只包含一個被稱爲單例的特殊類。經過單例模式能夠保證系統中一個類只有一個實例。即一個類只有一個對象實例。
  • 優勢:
    1、實例控制:單例模式會阻止其餘對象實例化其本身的單例對象的副本,從而確保全部對象都訪問惟一實例。
    2、靈活性:由於類控制了實例化過程,因此類能夠靈活更改實例化過程。
  • 缺點
    1、開銷
    雖然數量不多,但若是每次對象請求引用時都要檢查是否存在類的實例,將仍然須要一些開銷。能夠經過使用靜態初始化解決此問題。
    2、可能的開發混淆
    使用單例對象(尤爲在類庫中定義的對象)時,開發人員必須記住本身不能使用new關鍵字實例化對象。由於可能沒法訪問庫源代碼,所以應用程序開發人員可能會意外發現本身沒法直接實例化此類。設計

    <?php
       //單例
       class Log
       {
           //建立靜態私有的變量保存該類對象
           static private $instance;
           //參數
           private $config;
       
           //防止直接建立對象
           private function __construct($config){
               $this->config = $config;
               echo "我已經被實例化了-";
           }
       
           //防止克隆對象
           private function __clone(){}
       
           public static function getInstance($config){
               //判斷$instance是不是Log的對象
               //沒有則建立則建立
               if (!self::$instance instanceof self) {
                   self::$instance = new self($config);
               }
               return self::$instance;
           }
       
           public function getName(){
               echo $this->config;
           }
       }
       
       $db1 = Log::getInstance('實例化1');
       $db1->getName();
       echo "<br>";
       $db2 = Log::getInstance('實例化2');
       $db2->getName();
       
       ?>
       
       運行結果:
           我已經被實例化了-實例化1
           實例化2
相關文章
相關標籤/搜索