總體來說設計模式分為三大類:
- 建立型模式—共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
- 結構型模式—共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
- 行為型模式—共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式
下面,簡單介紹幾種設計模式:
單例模式
- 單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個例項。即一個類只有一個物件例項。
- 優點:
一、例項控制:單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。
二、靈活性:因為類控制了例項化過程,所以類可以靈活更改例項化過程。 -
缺點
一、開銷
雖然數量很少,但如果每次物件請求引用時都要檢查是否存在類的例項,將仍然需要一些開銷。可以通過使用靜態初始化解決此問題。
二、可能的開發混淆
使用單例物件(尤其在類庫中定義的物件)時,開發人員必須記住自己不能使用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