php設計模式總結2
策略模式:
定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立於使用算法的客戶。
封裝:把行為用接口封裝起來,我們可以把那些經常變化的部分,從當前的類中單獨取出來,用接口進行單獨的封裝。 互相替換:我們封裝好了接口,通過指定不同的接口實現類進行算法的變化。單例模式:
作為對象的創建模式,單例模式確保某一個類只有一個實例,而且自行實例化並向整個系統全局地提供這個實例。
要點:1.需要一個保存類的唯一實例靜態成員變量:
2.構造函數和克隆函數必須聲明為私有的,防止外部程序new類從而失去單例。
3.必須提供一個訪問這個實例的公共的靜態方法(通常是getInstance方法),從而返回唯一實例的一個引用
private static $_instance;
private function __construct() { $this->_db = pg_connect(‘xxxx‘); } private function __clone() { }//覆蓋__clone()方法,禁止克隆 public static function getInstance() { if(! (self::$_instance instanceof self) ) { self::$_instance= new self(); } return self::$_instance; }
工廠模式:
由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類(這些產品類繼承自一個父類或接口)的實例。
核心思想就是:用一個單獨的工廠類去創建實例化的過程。
工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的信息,決定究竟應該創建哪個具體類的對象.
通過使用工廠類,外界可以從直接創建具體產品對象的尷尬 局面擺脫出來,僅僅需要負責“消費”對象就可以了。
而不必管這些對象究竟如何創建及如何組織的.明確了各自的職責和權利,有利於整個軟件體系結構的優化。
不需要了解實例是如何工作的,只需要在工廠裏面創建它即可。
組合模式:
有時候又叫做部分-整體模式。常使用的場景:樹形菜單,文件夾菜單,部門組織架構圖
用於將對象組合成樹形結構以表示“部分-整體”的層次關系。組合模式使得用戶對單個對象和組合對象的使用具有一致性。
組合模式定義了一個單根繼承體系,使具有截然不同職責的集合可以並肩工作。
裝飾器模式:
裝飾模式是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。
它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。
組件對象的接口:可以給這些對象動態的添加職責
所有裝飾器的父類:需要定義一個與組件接口一致的接口,並持有一個Component對象,該對象其實就是被裝飾的對象。
具體的裝飾器類:實現具體要向被裝飾對象添加的功能。用來裝飾具體的組件對象或者另外一個具體的裝飾器對象。
適用場景:
1. 需要動態的給一個對象添加功能,這些功能可以再動態的撤銷。
2. 需要增加由一些基本功能的排列組合而產生的非常大量的功能,從而使繼承關系變的不現實。
3. 當不能采用生成子類的方法進行擴充時。
一種情況是,可能有大量獨立的擴展,為支持每一種組合將產生大量的子類,使得子類數目呈爆炸性增長。
另一種情況可能是因為類定義被隱藏,或類定義不能用於生成子類。
php設計模式總結2