整體來講設計模式分爲三大類:php
- 建立型模式---共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
- 結構型模式---共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
- 行爲型模式---共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式
下面,簡單介紹幾種設計模式:設計模式
單例模式this
缺點
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