標籤:記憶體 全域 實現 對象屬性 pdo 讀取配置 ... 依賴倒置 設計模式
三種基礎設計模式
註冊模式: 註冊類,可以用於全域調用
原廠模式:用於建立對象。好處:如果被調用的對象需要進行修改,那麼使用原廠模式便只修改一個地方就好
單例模式:不重複new 對象
適配器模式
1、適配器模式,可以將截然不同的函數介面封裝成統一的API
2、實際應用舉例,php的資料庫操作有mysql,mysqli,pdo3種可以用適配器模式統一成一致。類似的情境還有cache適配器,將memcache,redis,file,apc等不同的緩衝函數統一成一致
3、注意的是,代碼說的不夠完全,還需要進行封裝、改
策略模式
1、策略模式,將一組特定的行為和演算法封裝成類,以適應某些特定的上下文環境,這種模式就是策略模式 2、實際應用舉例,假如一個電商網站系統,針對男性女性使用者要各自跳轉到不同的商品類名,並且所有廣告位展示不同的廣告,傳統的做法是加入if...else... 判斷。 如果新增加一種使用者類型,只需要新增加一種策略即可``
資料對象映射模式
1、資料對象映射模式,是將對象和資料存放區起來,對一個對象的操作會映射為對資料存放區的操作
2、在代碼鐘實現資料對象映射模式,我們將試下ORM類,將複雜的sql語句映射成對象屬性的操作
3、結合是喲弄個資料對象映射模式,原廠模式,註冊模式
4、訪問對象屬性的時候就修改目前記錄對象的資料庫記錄
觀察者模式
1、觀察者模式(Observer),當一個對象狀態發生改變時,以來它的對象會全部收到通知,並自動更新
2、情境:一個事件發生後,要執行一連串更新操作。傳統的編程方式,就是在事件的代碼之後直接加入處理邏輯。當更新的邏輯增多之後,代碼會邊得難以維護。這種方式是耦合的,侵入式的,增加新的邏輯需要修改事件主題的代碼
3、觀察者模式實現了低耦合,非侵入式的通知與更新機制
原型模式
1、與原廠模式作用類似,都是用來建立對象
2、與原廠模式的實現不同,原型模式是先建立好一個原型對象,然後通過clone原型對象來建立新的對象。這樣就免去了類建立時重複的初始化操作
3、原型模式適用於大對象的建立,建立一個大對象需要很大的開銷,如果每次new就會消耗很大,原型模式僅需記憶體拷貝即可
裝飾器模式
1、裝飾器模式(Decorator),可以動態地添加修改類的功能
2、一個類提供了一項功能,如果要在修改並添加額外的功能,傳統的編程模式,需要寫一個子類繼承它,並重新實作類別的方法
使用裝飾器模式,僅需在運行時添加一個裝飾器對象即可實現,可以實現最大的靈活性
迭代器模式
1、迭代器模式,在不需要瞭解內部實現的前提下,遍曆一個彙總對象的內部元素
2、相比傳統的編程模式,迭代器模式可以隱藏遍曆元素所需的操作
3、 應用情境 遍曆資料庫表,拿到所有的user對象,然後用佛 foreach 迴圈,在迴圈的過程中修改某些字
4、如果一個對象是一個集合,比如資料結果集。 我們通常需要逐個取出每一個元素,如果想用foreach逐個取出的話,集合類需要繼承迭代器介面,實現介面中的方法,才可以被foreach迭代。 迭代器模式其實就是可使用foreach模式
代理模式
1、 在用戶端與實體之間建立一個代理對象(proxy),用戶端對實體進行的操作全部委派給代理對象,隱藏實體的具體實現細節。
2、 Proxy還可以與業務代碼分離,部署到另外的伺服器,業務代碼中通過RPC來委派任務。
3、樣本:讀寫分離
物件導向編程的基本原則
1、單一職責:一個類,只需做好一件事請。
2、開放封閉:一個類,應該時可擴充的,而不可修改的。
3、依賴倒置:一個類,不應該強依賴另外一個類。每個類對於另外一個類都是可替換的。
4、配置化:儘可能地使用配置,而不是寫入程式碼
5、面向介面編程:只需要關心介面,不需要關心實現。
配置與設計模式
1、PHP中使用ArrayAccess實現設定檔的載入
2、在Factory 方法中讀取配置,產生可配置化的對象
3、使用裝飾器模式實現許可權驗證,模板渲染,JSON串化
4、使用觀察者模式實現資料更新事件的一系列更新操作
5、使用代理模式實現資料庫的主從自動切換
PHP設計模式