Thinkphp中實現一些設計模式的方法php
1、咱們首先來了解一下設計模式所遵循的六大原則
1.單一職責原則
(1)定義:不要存在多於一個致使類變動的緣由。通俗的說,即一個類只負責一項職責。
(2)遵循單一職責原的優勢有:程序員
能夠下降類的複雜度,一個類只負責一項職責,其邏輯確定要比負責多項職責簡單的多;編程
提升類的可讀性,提升系統的可維護性;設計模式
變動引發的風險下降,變動是必然的,若是單一職責原則遵照的好,當修改一個功能時,能夠顯著下降對其餘功能的影響。
2.里氏替換原則
框架
定義1:若是對每個類型爲 T1的對象 o1,都有類型爲 T2 的對象o2,使得以 T1定義的全部程序 P 在全部的對象 o1 都代換成 o2 時,程序 P 的行爲沒有發生變化,那麼類型 T2 是類型 T1 的子類型。函數
定義2:全部引用基類的地方必須能透明地使用其子類的對象。設計
子類能夠實現父類的抽象方法,但不能覆蓋父類的非抽象方法。htm
子類中能夠增長本身特有的方法。對象
當子類的方法重載父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入參數更寬鬆。繼承
當子類的方法實現父類的抽象方法時,方法的後置條件(即方法的返回值)要比父類更嚴格。
3.依賴倒置原則
定義:高層模塊不該該依賴低層模塊,兩者都應該依賴其抽象;抽象不該該依賴細節;細節應該依賴抽象。
傳遞依賴關係有三種方式,以上的例子中使用的方法是接口傳遞,另外還有兩種傳遞方式:構造方法傳遞和setter方法傳遞,相信用過Spring框架的,對依賴的傳遞方式必定不會陌生。
在實際編程中,咱們通常須要作到以下3點:
低層模塊儘可能都要有抽象類或接口,或者二者都有。
變量的聲明類型儘可能是抽象類或接口。
使用繼承時遵循里氏替換原則。
依賴倒置原則的核心就是要咱們面向接口編程,理解了面向接口編程,也就理解了依賴倒置。
4.接口隔離原則
定義:客戶端不該該依賴它不須要的接口;一個類對另外一個類的依賴應該創建在最小的接口上。
用接口隔離原則對接口進行約束時,要注意如下幾點:
接口儘可能小,可是要有限度。對接口進行細化能夠提升程序設計靈活性是不掙的事實,可是若是太小,則會形成接口數量過多,使設計複雜化。因此必定要適度。
爲依賴接口的類定製服務,只暴露給調用的類它須要的方法,它不須要的方法則隱藏起來。只有專一地爲一個模塊提供定製服務,才能創建最小的依賴關係。
提升內聚,減小對外交互。使接口用最少的方法去完成最多的事情。
運用接口隔離原則,必定要適度,接口設計的過大或太小都很差。設計接口的時候,只有多花些時間去思考和籌劃,才能準確地實踐這一原則。
5.迪米特法則
定義:一個對象應該對其餘對象保持最少的瞭解。
在採用迪米特法則時要反覆權衡,既作到結構清晰,又要高內聚低耦合。
6.開閉原則
定義:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。
開閉原則是面向對象設計中最基礎的設計原則,它指導咱們如何創建穩定靈活的系統。開閉原則多是設計模式六項原則中定義最模糊的一個了,它只告訴咱們對擴展開放,對修改關閉,但是到底如何才能作到對擴展開放,對修改關閉,並無明確的告訴咱們。之前,若是有人告訴我「你進行設計的時候必定要遵照開閉原則」,我會覺的他什麼都沒說,但貌似又什麼都說了。由於開閉原則真的太虛了。
開閉比原則也就是對一些擴展能夠進行編輯而系統的核心包內容不容許被編輯
2、設計模式
設計模式默認,也就是遵循六大原則的,可是咱們操做過程當中還須要注意
什麼是設計模式?
設計模式(Design pattern)是一套被反覆使用、多數人知曉的、通過分類編目的、代碼設計經驗的總結。使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構同樣。
設計模式的特色:
(1) 在特定的場景下有可重用性,對相同類型不一樣問題的環境,其解決方案都有效。
(2) 可傳授性,即問題出現的機會不少,解決問題的方案相同,人們相對能夠接受。
(3) 有表示模式的名稱。
設計模式主要有如下做用:
(1) 重用設計,重用設計比重用代碼更有意義,它會自動帶來代碼的重用。
(2) 爲設計提供共用的詞彙,每一個模式名就是一個設計詞彙,其概念使得程序員間的交流更加方便。
(3) 在開發文檔中採用模式詞彙可讓其餘人更容易理解你的想法,理解爲何你會這樣作,你都作了些什麼。編寫開發文檔也更加容易。
(4) 應用設計模式可讓重構系統變得容易,可確保開發正確的代碼,並下降在設計或實現中出現錯誤的可能性,還能夠爲重寫其餘應用程序提供很好的系統框架。
(5) 正確使用設計模式,能夠節省大量的時間。
3、咱們將一些設計模式運用到咱們熟悉的框架中--->Thinkphp
下面是一個簡單的小例子,用設計模式來幫咱們實現奇數偶數和特殊元素0的判斷
1.首先,咱們須要在咱們的控制器中編寫,導入咱們所須要的一些類,實例化咱們的類而且調用咱們類中的方法
2.類Zhizheall.class.php文件中的東西,用來做爲一個基類,我想基類對於一個php程序員來講應該是很是熟悉了.
下面只是作了一些判斷及實現不一樣的效果,三個程序大體相同,只是判斷條件不一樣,調用的類不同而已.
3.類Zhizhezero.class.php中咱們用來作特殊的判斷
4.文件Zhizheodd.class.php中咱們用來作奇數的判斷
5.文件Zhizheeven.class.php中咱們用來作偶數的判斷
結果:
這樣咱們就將設計模式運用到咱們熟悉的框架中。