Java設計模式總結(前言)

mp.weixin.qq.com/s?__biz=MzI…

起設計模式,不少人都會以爲這個概念很熟悉,會想到單例模式、工廠模式等等,可是彷佛又說不出來什麼,說不上它的核心思想和設計原則。其實咱們的項目中,爲了代碼複用,增長可維護性,不少地方都用到了設計模式,它的思想和設計精髓貫穿每個系統設計。面試


今天整理了一下之前的項目和筆記,發現也只不過用到了經常使用的幾種設計模式,還有不少我聞所未聞,甚至連模式的名字都沒有聽過,它們提供了軟件開發過程當中面臨的通常問題的最佳解決方案。學習這些模式有助於經驗不足的開發人員經過一種簡單快捷的方式來學習軟件設計。因此決定寫這個系列文章,學習的同時和你們一塊兒分享。在具體到每個設計模式的實例以前,我以爲有必要先簡單認識和了解一下什麼是設計模式,先對這些概念有一個大概的印象,而後再深刻下去。編程


設計模式簡介設計模式

設計模式(Design pattern)表明了最佳的實踐,一般被有經驗的面向對象的軟件開發人員所採用。設計模式是軟件開發人員在軟件開發過程當中面臨的通常問題的解決方案。這些解決方案是衆多軟件開發人員通過至關長的一段時間的試驗和錯誤總結出來的。網絡

設計模式是一套被反覆使用的、多數人知曉的、通過分類編目的、代碼設計經驗的總結。使用設計模式是爲了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使代碼編制真正工程化,設計模式是軟件工程的基石,如同大廈的一塊塊磚石同樣。項目中合理地運用設計模式能夠完美地解決不少問題,每種模式在現實中都有相應的原理來與之對應,每種模式都描述了一個在咱們周圍不斷重複發生的問題,以及該問題的核心解決方案,這也是設計模式能被普遍應用的緣由。佈局


設計模式基本要素學習

設計模式主要有四個基本要素:ui

  • 模式名稱(pattern name):一個助記名,它用以兩個詞來描述模式的問題、解決方案和效果。設計

  • 問題(problem):描述了應該在什麼時候使用模式。3d

  • 解決方案(solution):描述了設計的組成成分,他們之間的相互關係及各自的職責和協助方式。代理

  • 效果(consequendes):描述了應用的效果及使用模式應權衡的問題。


設計模式分類

設計模式主要分爲三大類:

建立型模式:用於描述「怎樣建立對象」,它的主要特色是「將對象的建立與使用分離」。主要有如下5種模式:

  • 工廠方法模式(Factory Pattern)

  • 抽象工廠模式(Abstract Factory Pattern)

  • 單例模式(Singleton Pattern)

  • 建造者模式(Builder Pattern)

  • 原型模式(Prototype Pattern)


結構型模式:用於描述如何將類或對象按某種佈局組成更大的結構。主要有如下7種模式:

  • 適配器模式(Adapter Pattern)

  • 裝飾器模式(Decorator Pattern)

  • 代理模式(Proxy Pattern)

  • 外觀模式(Facade Pattern)

  • 橋接模式(Bridge Pattern)

  • 組合模式(Composite Pattern)

  • 享元模式(Flyweight Pattern)


行爲型模式:用於描述類或對象之間怎樣相互協做共同完成單個對象都沒法單獨完成的任務,以及怎樣分配職責。主要有如下11種模式:

  • 策略模式(Strategy Pattern)

  • 模板方法模式(Template Pattern)

  • 觀察者模式(Observer Pattern)

  • 迭代器模式(Iterator Pattern)

  • 責任鏈模式(Chain of Responsibility Pattern)

  • 命令模式(Command Pattern)

  • 備忘錄模式(Memento Pattern)

  • 狀態模式(State Pattern)

  • 訪問者模式(Visitor Pattern)

  • 中介者模式(Mediator Pattern)

  • 解釋器模式(Interpreter Pattern)

下面是我畫的一張設計模式歸類圖,你們參考一下:


設計模式遵循原則

設計模式遵循6大原則,分別爲:

  • 開閉原則(Open Close Principle):對擴展開放,對修改關閉。 

  • 里氏代換原則(Liskov Substitution Principle):只有當衍生類能夠替換掉基類,軟件單位的功能不受到影響時,基類才能真正被複用,而衍生類也可以在基類的基礎上增長新的行爲。

  • 依賴倒轉原則(Dependence Inversion Principle):這個是開閉原則的基礎,對接口編程,依賴於抽象而不依賴於具體。

  • 接口隔離原則(Interface Segregation Principle):使用多個隔離的接口來下降耦合度。 

  • 迪米特法則(最少知道原則)(Demeter Principle):一個實體應當儘可能少的與其餘實體之間發生相互做用,使得系統功能模塊相對獨立。

  • 合成複用原則(Composite Reuse Principle):原則是儘可能使用合成/聚合的方式,而不是使用繼承。繼承實際上破壞了類的封裝性,超類的方法可能會被子類修改。

設計模式之間的關係


(此圖不是我畫的,是網絡圖,我也沒有徹底弄懂,接下來的實例中我會慢慢摸索。)


以上是整理的關於設計模式一些概念性的東西,不論是應付面試仍是真心想學習設計模式提升本身軟件開發技能的人員,均可以記一下,加深設計模式在咱們腦海中的印象。下一篇開始,將介紹經常使用設計模式的具體實例。


若是以爲本文有用,請推薦給更多有須要的人,謝謝!若是發現問題,歡迎留言,請隨時批評改正,謝謝!

相關文章
相關標籤/搜索