摘要:設計模式的類別設計模式一共分為種類型,共種。屬于結構型的設計模式適配器模式橋接模式裝飾模式組合模式外觀模式享元模式代理模式。問題描述了應該在何時使用設計模式。解決方案描述了設計的組成成分,它們之間的相互關系及各自的職責和協作方式。
設計模式概述 1. 設計模式是什么
我們在平時編寫代碼的過程中,會遇到各種各樣的問題,細想一下很多問題的解決思路大致一樣的,這時候你就可以把解決問題的思路整理清晰,成為一種解決問題的核心模式,以后你就能使用這種模式解決類似的問題,而不必絞盡腦汁尋找最優解決方案。經過多年各路大牛的貢獻和實踐,形成了一套系統的軟件設計模式。
設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。之所以使用設計模式,根本原因是為了代碼復用,增加可維護性。
2. 設計模式的類別設計模式一共分為3種類型,共23種。
1)創建型模式:創建型模式抽象了實例化過程。他們幫助一個系統獨立于如何創建、組合和表示他的對象。
屬于創建型的設計模式:
單例模式(Singleton)、抽象工廠模式(Abstract Factory)、工廠模式(Factory Method)、建造者模式(Builder)、原型模式(Prototype)。
2)結構型模式:結構型模式涉及到如何組合類和對象以畫的更大的結構,結構型模式采用繼承或組合機制來組合接口或實現。
屬于結構型的設計模式:
適配器模式(Adapter)、橋接模式(Bridge)、裝飾模式(Decorator)、組合模式(Composite)、外觀模式(Facade)、享元模式(Flyweight)、代理模式(Proxy)。
3)行為型模式:行為模式設計到算法和對象間職責的分配。
屬于行為型的設計模式:
模塊方法模式(Template Method)、命令模式(Command)、迭代器模式(Iterator)、觀察者模式(Observer)、中介者模式(Mediator)、備忘錄模式(Memento)、解釋器模式(Interpreter)、狀態模式(State)、策略模式(Strategy)、職責鏈模式(Chain of Responsibility)、訪問者模式(Visitor)。
學習任何一種設計模式都要從以下4點入手:
A.模式名稱:一個助記名,他用一兩個詞來描述模式的問題、解決方案和效果。
B.問題:描述了應該在何時使用設計模式。
C.解決方案:描述了設計的組成成分,它們之間的相互關系及各自的職責和協作方式。
D.效果:描述了模式的應用效果及使用模式應權衡的問題。
3. 設計模式的意圖每種設計模式都致力于解決一種問題,以下表格列舉了這些設計模式的作用。
設計模式 | 意圖/作用 |
---|---|
創建型模式 | |
單例模式 | 保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。 |
抽象工廠模式 | 提供一個創建一系列相關或相互依賴對象的接口,而無需指定他們具體的類。 |
工廠模式 | 定義一個用于創建對象的接口,讓子類決定實例化哪一個類,工廠模式使用一個類的實例化延遲到其子類。 |
建造者模式 | 將一個復雜對象的構建與他的表示分離,使得同樣的構建過程可以創建不同的表示。 |
原型模式 | 用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。 |
結構型模式 | |
適配器模式 | 將一個類的接口轉化成客戶需要的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。 |
組合模式 | 將對象組合成樹型結構以表示“部分-整體”的層次結構。Composite使得用戶對單個對象和組合對象的使用具有一致性。 |
代理模式 | 為其他對象那提供一種代理以控制對這個對象的訪問。 |
橋接模式 | 將抽象部分和實現部分分離,使他們都可以獨立的變化。 |
裝飾模式 | 動態的給一個對象添加一些額外的職責。就增加功能來說,Decorator模式相比生成子類更為靈活。 |
外觀模式 | 為子系統的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。 |
享元模式 | 運用共享技術有效地支持大量細粒度的對象。 |
行為模式 | |
觀察者模式 | 定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新。 |
中介者模式 | 用一個中介對象來封裝一系列的對象交互。中介者使各種對象不需要顯式地互相引用,從而使其耦合松散,而且可以獨立地改變他們之間的交互。 |
職責鏈模式 | 使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到一個對象處理他為止。 |
命令模式 | 將一個請求封裝成一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日志,以及支持可撤銷的操作。 |
解釋器模式 | 給定一個語言,定義它的語法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。 |
迭代器模式 | 提供一種方法順序訪問聚合對象中各個元素,而不需暴露該對象的內部表示。 |
備忘錄模式 | 在不破壞封裝的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。這樣以后就可將該對象恢復到原先保存的狀態。 |
狀態模式 | 允許一個對象在其內部狀態改變時改變它的行為。對象看起來似乎修改了它的種類。 |
策略模式 | 定義一系列的算法將他們一個個的封裝起來,并且使他們可相互替換。本模式使得算法可獨立于使用它的客戶而變化。 |
模板方法模式 | 定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。TemplateMethod使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 |
訪問者模式 | 表示一個作用于某對象結構中的各元素的操作。它使得你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。 |
如果多的設計模式,初學者必須都要掌握,只需要掌握比較常用的幾種:
創新型模式:單例模式、抽象工廠模式、建造者模式、工廠模式。
結構型模式:適配器模式、組合模式、代理模式。
行為型模式:觀察者模式、中介者模式。
以上就是23種設計模式的概述,學習之路任重而道遠啊!
4. 設計原則除了設計模式,也需要了解一下設計原則,這里給出一些設計原則的基本介紹。
開閉原則:
開閉原則具有理想主義的色彩,它是面向對象設計的終極目標。
模塊應對擴展開放,對修改關閉,模塊應該在不修改源碼的情況下進行擴展。
里氏代換原則:
如果調用的是父類的話,那么換成子類也完全可以運行。
Java編譯程序會檢查程序是否符合里氏代換原則。還記得java繼承的一個原則嗎?子類override方法的訪問權限不能小于父類對應方法的訪問權限。里氏代換原則是繼承復用的一個基礎。
依賴倒序原則:
所謂依賴倒序原則是要依賴于抽象,不要依賴于具體。簡單的說就是要求對抽象進行編程,不要對實現進行編程,這樣就降低了實現與客戶之間的耦合。傳遞參數,或在組合聚合關系中,盡量引用層次高的類
接口隔離原則:
使用專門的接口比使用單一的總接口要好;
一個類對另一個類的依賴應該建立在最小的接口上;
一個接口代表一個角色,不應該將不用的角色交給一個接口。沒有關系的接口合并在一起形成一個臃腫的大接口,這是對角色和接口的污染;
不要強迫客戶使用它們不用的方法,如果強迫客戶使用它們不用的方法,那么這些客戶就會面臨這些不使用的方法的改變而帶來的改變。
合成/聚合復用原則:
合成/聚合復用原則就是在一個新的對象里面使用一些已有的對象,使之成為新對象的一部分;新的對象通過向這些對象的委派達到復用已有功能的目的。它的設計原則是:要盡量使用合成/聚合,盡量不要使用繼承。
就是說要少用繼承,多用組合關系來實現。否則修改父類的一個方法,各個子類都需要改動。“牽一發而動全身”!面向對象是要把波動限制在盡量小的范圍。
最小知識原則(迪米特法則):
也叫迪米特法則。不要和陌生人說話,即一個對象應對其他對象有盡可能少的了解。迪米特法則的初衷是為了降低類之間的耦合,每個類盡量減少對其他類的依賴,這樣系統的功能模塊才更容易獨立。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68890.html
摘要:第七章包的基本概述起因在我們設計一個程序的時候尤其是多人合作,會寫一些類來實現功能,但是往往會有重名的現象發生,為了解決這個問題,則專門設計了包。概念為了更好地組織類,提供了包機制,用于區別類名的命名空間。 第七章 7.1 包的基本概述 起因: 在我們設計一個程序的時候(尤其是多人合作),會寫一些類來實現功能,但是往往會有重名的現象發生,為了解決這個問題,則專門設計了包。(還有其他作用...
摘要:性能調優概述性能優化有風險和弊端,性能調優必須有明確的目標,不要為了調優而調優盲目調優,風險遠大于收益程序性能的主要表現點執行速度程序的反映是否迅速,響應時間是否足夠短內存分配內存分配是否合理,是否過多地消耗內存或者存在內存泄漏啟動時間程序 [TOC] Java性能調優概述 性能優化有風險和弊端,性能調優必須有明確的目標,不要為了調優而調優!!!盲目調優,風險遠大于收益!!! 程序性...
摘要:整個包,按照功能可以大致劃分如下鎖框架原子類框架同步器框架集合框架執行器框架本系列將按上述順序分析,分析所基于的源碼為。后,根據一系列常見的多線程設計模式,設計了并發包,其中包下提供了一系列基礎的鎖工具,用以對等進行補充增強。 showImg(https://segmentfault.com/img/remote/1460000016012623); 本文首發于一世流云專欄:https...
摘要:常用類概述包含執行基本數字運算的方法沒有構造方法,如何使用類中的成員呢看類的成員是否都是靜態的,如果是,通過類名就可以直接調用。所有類都直接或間接的繼承該類。 1 常用API1.1 Math1.1.1 Math類概述Math包含執行基本數字運算的方法沒有構造方法,如何使用類中的成員呢?看類的成員是否都是靜態的,...
閱讀 1951·2021-09-07 09:59
閱讀 2520·2019-08-29 16:33
閱讀 3688·2019-08-29 16:18
閱讀 2849·2019-08-29 15:30
閱讀 1678·2019-08-29 13:52
閱讀 2035·2019-08-26 18:36
閱讀 530·2019-08-26 12:19
閱讀 694·2019-08-23 15:23