單一職責原則就是乙個類只負責做一件事件,只有乙個功能。比較於功能比較多的類,面對功能實現修改的時候,只需要修改乙個類,而不會對其他的功能造成影響。比如說介面顯示和遊戲邏輯分開,只要不該介面,介面與邏輯的具體實現都可以單獨修改而不會對彼此造成影響。
開放封閉原則指的是,應對需求變更,**對修改是封閉,對增加是開放的。當然應對需求的變更,**肯定都是需要修改的,就看修改的多還是修改的少。
依賴倒轉是指在有依賴存在的情況下,要依賴於抽象依賴於介面而不是具體的實現。比如說a--->b,我們會從b上抽象出乙個父類fatherb,讓a-->fatherb,這樣當我們需要增加其他的型別如b1,b2的時候,a是不需要做修改的。
迪公尺特法則是指封裝,將user不需要的屬性或是方法都封裝起來,不讓使用者看到,只提供需要的功能出去。這樣使用者不會知道類中的細節,可以減少耦合。
該類別下的幾個模式都是和類的建立相關的設計模式。簡單工廠,把具體類的建立轉移到工廠類中,又工廠來決定具體例項化哪一種物件。對使用者來說不關心當前使用的是具體的哪乙個類,只提供選擇給工廠。注意只是
轉移了switch..case語句,而非沒有。
使用者在每一次要建立物件的時候,都需要使用工廠來建立物件,而且每一次建立都需要提供一次選擇,如果要改建立的物件的型別的話,需要每處都改。
工廠方法,工廠方法從簡單工廠演變而來,它為每乙個類提供乙個建立它的工廠。它把例項化哪乙個物件的責任又交回給使用者。但是好處是,加入你需要多次建立同一種型別的物件,那麼只需要儲存具體工廠的引用就可以,在修改的時候,也只需要修改一次。應對修改都是需要修改原始檔的,就是看修改的多還是修改的少。
抽象工廠,抽象工廠從工廠方法演變而來,工廠方法只建立出乙個物件,而抽象工廠提供多個建立函式,可以建立出
有關聯的一系列物件。
單例,顧名思義。
模板模式,指的是把固有的框架或者演算法流程實現在父類中,子類從父類中繼承框架,然後重寫個性化不同的步奏的實現。這樣可以復用的框架流程,面對流程的修改只需要改寫乙個地方。
**模式,**模式中被**者和**提供相同的介面(實現同一套介面),使用者時不只帶有**這麼回事情的。**組合被**者,提供封裝。在**類中可以加入鑑權、安全等一些**,更好的保護被**者。
外觀模式,外觀模式的思想和實現差不多,即外邊看起來長的差不多,同樣的介面下可以封裝出不同的實現。
介面卡模式,介面卡模式更多的用於對遺留**的復用,或為不同具體實現提供相同的介面。即把所有的變數封到介面卡中,把耦合複雜性限制到介面卡中,為使用者提供統一的介面。使用者就不再存在這個複雜性,也就是說不是所有的使用者開發者都來關心不同的實現。
橋接模式,主要用於兩種及以上的分類方法中。它的原理是,能夠用組合的情況下優先用組合,然後再用繼承。用組合代替繼承,即用多線繼承來代替單線的基礎,可明顯的降低繼承的層次減少類的數量。
比如說2中不同的手機,3種不同的遊戲,橋接(組合)產出的類的個數是3+3,單線基礎產生的類的個數是2^3=8
裝飾模式,裝飾模式動態的介面新增功能。它的實現是:類a,裝飾器都提供相同的介面,裝飾器中儲存類a的引用,在裝飾器的介面中呼叫類a的介面,再新增額外的功能。比較於直接使用繼承,更加的靈活,不用為每一種不同的實現產生乙個類,降低了類的個數。
策略模式,策略模式是實現乙個策略類,策略類中實現乙個統一的介面,再在該介面中例項化不同的演算法。對使用者來說,只關心最終的結果,而不需要去在意具體的演算法。
觀察者模式,觀察者模式實際上乙個註冊通知的機制,本來乙個類a需要注意相應的事件,又同時要做其他的工作。引入觀察通知機制後,該類平時只需要做他本身的工作,把觀察通知的則是都交由專門的類(乙個物件)來負責。假如有很多個類a的物件,那麼每乙個物件不用都去注意特定事件的發生了。注意該模式對依賴倒轉的原則 體現的特別好。
命令模式,命令模式的功能是把client(客戶)和serve(服務提著)解耦,引入乙個服務員。client只需要說我要某種程度的服務,需要把某種服務封裝成乙個類,伺服器把這個服務(或者叫訂單)分配給服務提供真來執行。客戶只管結果,不用去管具體是由哪乙個服務提供者來提供的服務。服務員這邊可以提供合適的排程演算法來使服務提供者的效率更加的高效。
狀態模式和職責鏈模式,個人認為這兩種模式的目的都是消滅掉switch..case語句,把選判斷解散到不同的類中,可以更加靈活的來處理狀態以及職責鏈的轉換過程。
避免出現太過複雜的switch..case分支判斷。
它的實現原理是在類中提供下一跳的物件,這樣一下向下傳遞,直到任務(狀態)被處理。
設計模式的理解tips:第一,從使用者的角度出發來思考;第二,想象你有不同種類的類,要提供抽象;第三,想象你例項化出的物件可能特別的多。
設計模式都是四個原則的具體實現,主要的點在封裝,在抽象,在繼承,在復用,在解耦。
Java大話設計模式學習總結(十六) 狀態模式
狀態模式 state 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列當中,可以把複雜的判斷邏輯簡化。當然,如果這個狀態判斷很簡單,那就沒必要使用 狀態模式 了。...
《大話設計模式》學習筆記
當我們學習了物件導向分析設計程式設計思想,我們要考慮通過封裝 繼承 多型把程式的耦合度降低。使得程式具備五個特點 可維護 可復用 可擴充套件 靈活性好。寫出來的程式 要規範,變數的命名等都要有意義,最後都用英文代替,要有異常判斷和錯誤處理。有人說初級程式設計師的工作就是複製和貼上,這其實是非常不好的...
大話設計模式 裝飾者模式(總結)
1 裝飾者模式的一般應用場景 當系統增加新的功能,需要給類增加新的功能,而這些新的功能又主要是為了修飾原來類中的核心職責或者功能,也就是說,這些新的功能是用來修飾的,而且這些用來修飾的功能是在滿足某乙個特定情境下才會有需要執行的,這個時候就需要用到 裝飾者模式。2 裝飾者模式的構成 1 抽象構件 c...