php設計模式

木木先生發表於2019-02-16

總體來說設計模式分為三大類:

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

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

單例模式

  • 單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個例項。即一個類只有一個物件例項。
  • 優點:
    一、例項控制:單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。
    二、靈活性:因為類控制了例項化過程,所以類可以靈活更改例項化過程。
  • 缺點
    一、開銷
    雖然數量很少,但如果每次物件請求引用時都要檢查是否存在類的例項,將仍然需要一些開銷。可以通過使用靜態初始化解決此問題。
    二、可能的開發混淆
    使用單例物件(尤其在類庫中定義的物件)時,開發人員必須記住自己不能使用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
    
    

相關文章