設計模式-23種設計模式整體介紹及應用場景、七大設計原則總結


、創建型模式:都是用來幫助我們創建對象的!(關注對象的創建過程

1.單例模式

  保證一個只有一個實例,並且提供一個訪問該實例的全局訪問點。

2.工廠模式("Gof book"中把工廠方法與抽象工廠分為兩種模式,所以創建型模式共為五種,這里只是為了方便整理,合在了工廠模式中)

  -簡單工廠模式

用來產同一等級結構的任意產品。(對於增加新的產品,需要修改已有代碼)

  -工廠方法模式

用來生成同一等級結構中的固定產品。(支持增加任意產品)

  -抽象工廠模式

用來生產不同產品族的全部產品。(對於增加新的產品,無能為力,支持增加產品族)

3.建造者模式

  分離了對象子組件的單獨構造(由Builder負責裝配(由Director負責)從而可以構造出復雜的對象。

4.原型模式

  通過new產生一個對象需要非常繁瑣的數據准備或訪問權限,則可以使用原型模式

 

、結構型模式:是從程序的結構上實現耦合,從而可以擴大整體的類結構,用來解決更大的問題。(關注對象類的組織

1.適配器模式

  工作中的場景:經常用來做舊系統改造和升級如果我們的系統開發之后再也不需要維護,那么很多模式都是沒必要的,但是不的是,事實卻是維護一個系統的代價往往是開發一個系統的數倍

  學習中見過的場景:

java.io.InputStreamReader(InputStream);   java.io.OutpuStreamWriter(OutputStream)

2.代理模式

   核心作用:通過代理,控制對對象的訪問可以詳細控制訪問某個(某類)對象的方法在調用這個方法前做前置處理調用這個方法后做后置處理。(AOP微觀實現

   AOPAspect Oriented Programming面向切面編程核心實現機制!

   開發框架中應用場景:

 structs2中攔截器的實現;數據庫連接池關閉處理;Hibernate中延時加載的實現;mybatis中實現攔截器插件;AspectJ的實現;springAOP實現(日志攔截,聲明事務處理);web serviceRMI遠程方法調用

3.橋接模式

實際開發中應用場景

JDBC驅動程序;

AWT中的Peer架構;

銀行日志管理:格式分類:操作日志交易日志、異常日志

              距離分類:本地記錄日志異地記錄日志

人力資源系統中獎金計算模塊:獎金分類:個人獎金、團體獎金、激勵獎金。

                              部門分類:人事部門銷售部門研發部門

OA系統中的消息處理:業務類型:普通消息加急消息特急消息。

                     發送消息方式:系統內消息手機短信、郵件

4.裝飾模式

職責:動態的為一個對象增加新的功能裝飾模式是一種用於代替繼承的技術,無須通過繼承增加子類就能擴展對象的新功能使用對象的關聯關系代替繼承關系,更加靈活,同時避免類型體系的快速膨脹。

5.組合模式

使用場景:把部分和整體的關系用樹形結構來表示,從而使客戶端可以使用統一的方式處理部分對象和整體對象。

核心:抽象構件角色定義了葉子和容器構件的共同點;葉子構件角色:無子節點;容器構件角色:有容器特征,可以包含子節點

6.外觀模式

開發中常見的場景

頻率很高。哪里都會遇到。各種技術和框架中,都有外觀模式的使用

JDBC封裝后的,commons提供的DBUtilsHibernate提供的工具類、Spring JDBC工具類

7.享元模式

場景:內存屬於稀缺資源,不要隨便浪費,如果有很多個完全相同或相似的對象,我們可以通過享元模式,節省內存

核心:享元模式共享的方式高效地支持大量細粒度對象的重用;享元對象能做到共享的關鍵是區分了內部狀態和外部狀態。內部狀態:可以共享,不會隨環境變化而改變外部狀態:不可以共享,會隨環境變化而改變

 

、行為型模式:關注系統中對象之間的相互交互,研究系統在運行時對象之間的相互通信和協作,進一步明確對象的職責

1.責任鏈模式

定義:將能夠處理同一類請求的對象成一條鏈,所提交的請求沿着鏈傳遞鏈上的對象逐個判斷是否有能力處理該請求,如果能則處理,如果不能則傳遞給上的下一個對象。

場景:打牌時,輪流出牌;接力賽跑中,獎學金審批;公司中,公文審批

2.迭代器模式

場景提供一種可以遍歷聚合對象的模式稱為游標cursor模式聚合對象:存儲數據;迭代器:遍歷數據

3.中介者模式

核心:如果一個系統中對象之間的聯系呈現為網狀結構,對象之間存在大量多對多關系,將導致關系極其復雜,這些對象稱為“同事對象”;我們可以引入一個中介者對象,使各個同事對象只跟中介者對象打交道,將復雜的網絡結構化解為一對多的星形結構。

4.命令模式

定義:將一個請求封裝一個對象,從而使我們可用不同的請求對客戶進行參數化;對請求排隊或者記錄請求日志,以及支持可撤銷的操作之為:動作Action模式事務transaction模式

5.解釋器模式

介紹:是一種不常用的設計模式;用於描述如何構成一個簡單的語言解釋器,主要用於使用面向對象語言開發的編譯器和解釋器設計當我們需要開發一種新的語言時,可以考慮使用解釋器模式盡量不要使用解釋器模式,后期維護會有很大麻煩項目中,可以使用JrubyGroovyjavajs引擎來替代解釋器的作用,彌補java語言的不足

6.策略模式

本質:分離算法,選擇實現。

開發中常見的場景:JAVASEGUI編程中,布局管理;Spring框架中,Resource接口,資源訪問策略;

7.模板方法模式

核心:處理某個流程的代碼已經都具備,但是其中某個節點的代碼暫時不能確定因此我們采用工廠方法模式,將這個節點的代碼實現轉給子類完成。即:處理步驟父類中定義好,具體實現延遲到子類中定義

8.狀態模式

核心:用於解決系統中復雜對象的狀態轉移以及不同狀態下行為的封裝問題

9.觀察者模式

核心:觀察者模式主要用於1N的通知。當一個對象(目標對象SubjectObjservable)狀態變化時,他需要及時告知一系列對象(觀察者對象,Observer),令他們做出響應

10.備忘錄模式

核心:就是保存某個對象內部狀態的拷貝,這樣以后就可以該對象恢復到原先的狀態。

11.訪問者模式

核心:將作用於某種數據結構中各元素的操作分離出來封裝成獨立的類,使其在不改變數據結構的前提下可以添加作用於這些元素的新的操作為數據結構中的每個元素提供多種訪問方式。

 

、七條開發原則

1.開閉原則(擴展開放,修改關閉

2.里氏替換原則(繼承必須確保所擁有的性質在子類中依然成立)

3.依賴倒置原則(要面向接口編程,不要面向實現編程

4.單一職責原則(一個類應該有且僅有一個引起它變化的原因,否則類應該被拆分

5.接口隔離原則(要為各個類建立它們需要的專用接口,而不要試圖去建立一個很龐大的接口供所有依賴它的類去調用

6.迪米特法則(如果兩個軟件實體無須直接通信,那么就不應當發生直接的相互調用,可以通過第三方轉發該調用

7.合成復用原則(它要求在軟件復用時,要盡量先使用組合或者聚合等關聯關系來實現,其次才考慮使用繼承關系實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM