在我們軟體開發的過程中往往會遇到需求的變更,導致我們的功能需要的改變,進而可能讓我們辛辛苦苦編寫的大量**付諸東流。那麼,該怎樣提高我們**的可擴充套件性呢。提高我們**的擴充套件性這樣在改變功能的時候就能在最小代價的情況修改我們的**。設計模式,就很大程度上為我們解決了這個問題。設計模式是一套理論,由前任總結出的一套可以反覆使用的經驗,他可以提高**的可重用性,增強系統的可維護性,以及解決一系列的複雜問題。設計模式給我們提供指導,以六大設計原則為理論基礎,23種具體的設計模式供我們實踐參考。
1.工廠方法模式:主要角色有抽象產品,具體產品,抽象工廠,具體工廠 。它利用了多肽的特性,通過乙個父類定義乙個生產產品的公共的介面,而子類就實現生成具體產品,這樣能使產品物件的例項化操作在子類中中完成,這樣是通過具體的子類物件來確定例項化哪乙個具體的產品類。能減少很多相同的**量。
2.抽象工廠模式:主要角色有抽象產品,具體產品,抽象工廠,具體工廠 。可以說是對工廠方法模式的乙個補充,工廠方法只能是乙個產品或者乙個方法,抽象工廠講述的是對於該型別多個產品或對於乙個物件的多個方法的整合,即在乙個介面定義很多的方法,實現也實現很多方法。子類可以在乙個父類中呼叫很多的方法。
3.建造者模式:主要角色有抽象建造者,具體建造者,指揮者,產品角色。乙個物件往往是由很多部分組成的,我們需要通過一些方法就所有的部門封裝成乙個完整的物件,然後再返回給需呼叫者,呼叫者只用呼叫就行而無需關心該物件是怎麼組裝的。
4.原型模式: 主要角色有抽象原型類,具體原型類,客戶類。當很多物件擁有相同的屬性的時候,可以通過乙個已有的例項來簡化物件的建立過程,以此來提高新例項的建立效率。
5. 單例模式:主要角色有單例。單例,就是我們執行的當前虛擬機器中有且只有乙個需要的物件,不存在重複。單例模式在記憶體中只有乙個例項,減少了記憶體開支, 減少了系統的效能開銷。在開發中應用往往會用一中叫列舉方式實現單例,它不僅能避免多執行緒同步問題,而且還能防止反序列化重新建立新的物件
6.介面卡模式:主要有目標抽象類,介面卡類,適配者類,客戶類。首先定義包裝類,其作用是包裝一些不相容的介面的物件,在客戶需要呼叫介面時,它會將客戶的請求轉化為對適配者相對應的介面。它主要實現一些介面不相容的類一起工作。
7.橋接模式:主要角色有抽象類,擴充抽象類,實現類介面,具體實現類。對於有多個變化維度,並且每個維度都要多個變數,那麼可以通過對每個維度分別定義乙個介面,在與實現分離。降低它們的耦合度,是它們各自獨立的變化。
8.組合模式:主要角色有抽象構件,葉子構件,容器構件,客戶類。處理整體和部分之間的額關係,它通過將物件組織到樹形結構中,很好的實現容器物件與葉子物件的遞迴組合,這樣使用者在使用的時候便不用區分它們而是均看做是容器物件和葉子物件。
9.裝飾模式:主要角色有抽象構件,具體構件,抽象裝飾類,具體裝飾類。在不必改變原類檔案和不使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。雖然使用繼承也能實現對乙個類的功能進行增強,但是在繼承時會出現子類**的問題。
10.外觀模式:主要角色有外觀角色,子系統角色。乙個大型的系統往往是由很多小系統組成的,這些子系統與外界的互動是乙個統一的外觀物件。通過定義乙個高層的介面來使子系統的一組介面有乙個一致的介面。
11.享元模式:主要角色有抽象享元類,具體享元類,費共享具體享元類,享元工廠類。在系統中多個物件中的屬性有相同的那麼 它們可以利用享元工廠負責乙個享元池。是外部的物件可以共享這裡面的功能和屬性。
12.**模式:主要角色有抽象主題角色,**主題角色,真實主題角色。通過引入乙個新的物件來做一些真實物件沒做的事兒。在spring中就運用了典型的動態**來進行對事務的管理。其中包含有jdk動態**和cglib動態**,它們通過在記憶體中產生乙個新的類來作為真實類的替身,並且幫它們完成事務的提交和關閉等一些列操作。這樣在寫真實物件的時候就不需要寫過多的**,只需要就此拿給spring**就行了。
13.職責鏈模式:主要角色有抽象處理著,具體處理者,客戶類。對乙個客戶的請求通過使用者不同的功能的類就行逐級的接受。知道這個請求能被處理為止。
14.命令模式:主要角色有抽象命令類,具體命令類,呼叫者,接受者,客戶類。在一些物件傳送請求的時候就需要有接受者來接受這個請求。我們通過命令請求者傳送它的請求而不管請求在傳遞的過程中被誰接受,然後只需要命令接受者接受這個請求就可以,而不用管是誰發出來的請求。這樣就類似於我們在軟體開發過程中在持久層中定義與資料庫互動的方法,只需要定義乙個泛型使每乙個傳過來的額請求都能與資料庫進行互動而不用管發出命令的是誰。
15.直譯器模式:主要角色有抽象表示式,終結符表示式,非終結符表示式,環境類,客戶類。就是通過乙個解釋**字元的程式來完成使用者所想要達到的效果。
16.迭代器模式:主要角色有抽象迭代器,具體迭代器,抽象聚合類,具體聚合類。對於乙個list物件或者乙個set物件,定義乙個迭代器來對這些物件進行訪問和遍歷。
17.中介者模式:主要角色有抽象中介者,具體中介者,抽象同事類,具體同事類。利用乙個中介場所,該場所包含了一系列的物件互動,使用戶均能在這個中介場所中進行使用者之間的互動,並且獨立互補影響。
18.備忘錄模式:主要角色有原發器,備忘錄,負責人。對於乙個物件,我們在不破壞其封裝性的前提下獲取它的內部狀態,並且能儲存該物件的狀態。之後在對這個物件操作之後我們能返回到之前物件儲存時候的狀態。就是等同於撤銷操作。
20.狀態模式:主要角色有環境類,抽象狀態類,具體狀態類。把執行的動作封裝在跟狀態有關的類裡,由狀態來決定動作該如何執行。等於就是給乙個物件賦予哪些許可權,當該物件的許可權發生改變時,那麼他的行為也將會隨之改變。
21.策略模式:主要角色有環境類,抽象策略類,具體策略類。使用者在想要達到乙個目的時候可以用不同的方法。每乙個方法裡都有不同的執行過程。雖然目的相同但是在執行不同的過程中所達到的效果是不一樣。
22.模板方法模式:主要角色有抽象類,具體子類。在使用者實現某些功能的時候所經歷的步驟是一樣的,那麼就可以在抽象類中把基本操作方法組合在一起形成乙個總算法或乙個總行為的方法。就比如在連線資料庫的時候都是一套的流程,那就可以使用末班方法提高效率。
23.訪問者模式:主要角色有抽象訪問者,具體訪問者,抽象元素,具體元素,物件結構。對於乙個物件,可以有不同的物件(訪問者)來對這個物件進行訪問,但是呢由於訪問者不同,它們訪問的方式就有可能不同,從而使它們所訪問到的東西就不相同。而且還可以新增乙個訪問者來對那乙個物件就行訪問。
23種設計模式 概述
單例 singleton 模式 某個類只能生成乙個例項,該類提供了乙個全域性訪問點供外部獲取該例項,其拓展是有限多例模式。原型 prototype 模式 將乙個物件作為原型,通過對其進行複製而轉殖出多個和原型類似的新例項。工廠方法 factory method 模式 定義乙個用於建立產品的介面,由子...
GoF23種設計模式概述
設計模式的經典名著 design patterns elements of reusable object oriented software,中譯本名為 設計模式 可復用物件導向軟體的基礎 的四位作者erich gamma richard helm ralph johnson,以及john vli...
23種設計模式概述(分類和原則)
設計模式 design pattern 是一套被反覆使用 多數人知曉的 經過分類的 設計經驗的總結。使用設計模式的目的 為了 可重用性 讓 更容易被他人理解 保證 可靠性。設計模式使 編寫真正工程化 設計模式是 軟體工程 的基石脈絡。建立型模式 5鐘,物件例項化的模式,建立型模式用於解耦物件的例項化...