1. 程式人生 > >Java中23種設計模式入門教程

Java中23種設計模式入門教程

設計模式分類:
  behavioural 行為型, structural 結構型, creational 建立型

  behavioural Patterns:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式 -11

  structural Patterns: 介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式 -7

  creational Patterns: 工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式 -5

遵循的六大原則
  1、開閉原則:對擴充套件開放,對修改關閉。需要擴充套件的時候,不能修改原有程式碼,所以常用介面和抽象類來實現
  2、里氏替換原則:子類可以擴充套件父類的功能,但不能改變父類原有的功能(不能覆蓋父類的非抽象方法)。所以要使用基於抽象類和介面的繼承。
  3、依賴倒轉原則:高層模組不應該依賴低層模組,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象
  4、介面隔離原則:使用多個專門的介面,而不使用單一的總介面,即客戶端不應該依賴那些它不需要的介面。可以把介面拆開,用組合搞定
  5、迪米特法則:一個物件應該對其他物件保持最少的瞭解,類應該減少了不必要的依賴,降低耦合關係。當然若過分的使用,會產生大量這樣的傳遞類,增加系統複雜度。
  6、單一職責原則:一個類只負責一個功能領域中的相應職責,實現高內聚、低耦合,增加可複用性

  開閉原則是目標,里氏代換原則是基礎,依賴倒轉原則是手段,相輔相成,相互補充,目標一致,只是分析問題時所站角度不同而已

概念理解

  5種建立型模式
這裡寫圖片描述

  7種結構型模式
這裡寫圖片描述

  11種行為型模式
這裡寫圖片描述

1.abstractfactory 抽象工廠模式
  建立多個工廠類,這樣一旦需要增加新的功能,直接增加新的工廠類就可以了,不需要修改之前的程式碼。工廠類實現Provider介面,釋出資訊類實現Sender介面

2.adpter 介面卡模式
  將某個類的介面轉換成客戶端期望的另一個介面表示,目的是消除由於介面不匹配所造成的類的相容性問題。用到繼承和實現介面
  * 類的介面卡模式:當希望將一個類轉換成滿足另一個新介面的類時,可以使用類的介面卡模式,建立一個新類,繼承原有的類,實現新的介面即可。public class Adapter extends Source implements Targetable
  * 物件的介面卡模式:當希望將一個物件轉換成滿足另一個新介面的物件時,可以建立一個Wrapper類,持有原類的一個例項,在Wrapper類的方法中,呼叫例項的方法就行。
  * 介面的介面卡模式:當不希望實現一個介面中所有的方法時,可以建立一個抽象類Wrapper,實現所有方法,我們寫別的類的時候,繼承抽象類即可。

3.bridge 橋接模式
  通過對Bridge類的呼叫,實現了對介面Sourceable的實現類SourceSub1和SourceSub2的呼叫,將抽象化與實現化解耦。
像JDBC橋DriverManager一樣,JDBC提供統一介面,每個資料庫提供各自的實現,用一個叫做資料庫驅動的程式來橋接就行了

4.builder 建造者模式
  是抽象工廠模式和最後的Test類結合體,將很多功能整合到一個類裡,用來建立具有多個不同的屬性的物件

5.chain of responsibility 責任鏈模式
  為解除請求的傳送者和接收者之間耦合,而使多個物件都有機會處理這個請求。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個物件處理它。

6.command 命令模式
  目的就是達到命令的發出者和執行者之間解耦,實現請求和執行分開。用來解耦invoker和receiver

7.composite 組合模式

8.decorator 裝飾模式

9.facade 外觀模式

10.factory method 工廠方法模式
  普通工廠方法模式:建立一個工廠類,對實現了同一介面的一些類進行例項的建立
  多個工廠方法模式:是提供多個工廠方法,分別建立物件
  靜態工廠方法模式:多個工廠方法模式裡的方法置為靜態的,不需要建立例項,直接呼叫即可

11.flyweight 享元模式

12.interpreter 直譯器模式

13.iterator 迭代子模式

14.mediator 中介者模式

15.memento 備忘錄模式

16.observer 觀察者模式

17.prototype 原型模式
  實現Cloneable介面,覆寫clone方法 ,深複製不僅複製所考慮的物件,而且把要複製的物件所引用的物件都複製了一遍。而淺複製僅僅複製所考慮的物件,而不復制它所引用的物件。

18.proxy 代理模式
  為其他物件提供一種代理或替身以控制對這個物件的訪。動態代理模式通過使用反射,可以在執行期決定載入哪個類,避免了一個類對應一個代理的問題;同時,通過統一的invoke方法,
統一了代理類對原函式的處理過程,使用動態代理很大程度上減少了重複的程式碼,降低了維護的複雜性和成本。

19.singleton 單例模式
  確保一個類只有一個例項,並提供一個訪問它的全域性訪問點!
  * 餓漢模式 執行緒安全 但效率比較低 ,在類載入的時候建立一次例項,不會存在多個執行緒安全問題
  * 懶漢式是延時載入,在被引用的時候才會建立例項,使用volatile、雙重校驗鎖保證執行緒安全和執行效率
  * 靜態內部類持有單例物件,則可在引用時再載入例項,以達到懶載入的目
  * 在用列舉實現單例時,可以保證三個特性,自由序列化,執行緒安全,保證單例
牢記單例的三大要點:執行緒安全、延遲載入、序列化與反序列化安全

20.state 狀態模式

21.strategy 策略模式

22.template method 模板方法模式

23.visitor 訪問者模式