設計模式(1、類型及原則)

1、設計模式有哪些

標準的設計模式總共有23種,這些模式能夠分爲三大類,建立型、結構型和行爲型,除了這23種外,還有其餘如J2EE的設計模式(MVC等),這裏只學習23中的常見的幾種,結合Head First 設計模式和Java的一些框架源碼進行深刻學習,並經過ProcessOn畫出UML圖。html

  • 建立型:建立型主要提供了一種在建立對象時隱藏建立邏輯的方式,好比一般咱們是經過new顯式的建立對象,而建立型模式只提供了建立對象的方法,隱藏了建立對象的過程,可以更靈活的對對象的建立過程進行靈活擴展。主要有如下:
    • 工廠模式
    • 單例模式
    • 抽象工廠模式
    • 原型模式
    • 建造者模式
  • 結構型:結構型設計模式主要側重於類和對象的組合,傳統的繼承可能會致使大量的類,讓項目十分臃腫複雜和難以擴展,結構型的設計模式對對象進行抽象,並採用組合的方式,大大較少了類的數量,同時更靈活的擴展。
    • 適配器模式
    • 外觀模式
    • 裝飾器模式
    • 代理模式
    • 橋接模式
    • 過濾器模式
    • 組合模式
    • 享元模式
  • 行爲型模式:行爲型模式主要側重於對象間的通訊
    • 觀察者模式
    • 命令模式
    • 狀態模式
    • 迭代器模式
    • 模板模式
    • 策略模式
    • 責任鏈模式
    • 解釋器模式
    • 中介者模式
    • 備忘錄模式
    • 空對象模式
    • 訪問者模式


2、設計模式原則

六大原則編程

  • 開閉原則:對擴展開放,對修改關閉。
  • 里氏替換原則:任何基類能夠出現的地方,子類必定能夠出現。此原則保證子類能夠替換基類而不影響原有功能,同時能夠在基類的基礎上增添行爲。
  • 依賴倒轉原則:針對接口編程,依賴於抽象而不依賴於具體。
  • 接口隔離原則:相對於單一的接口,使用多個隔離的接口會更好,強調下降依賴、下降耦合。
  • 迪米特法則(最少知道原則):一個實體應儘可能少的與其餘實體模塊發生相互做用,使得系統功能模塊相互獨立。
  • 單一原則:一個類只負責一項職責,防止一個類負責多項職責,當其中有項須要修改的時候,影響到其餘職責的運行。

單一職責原則告訴咱們實現類要職責單一;里氏替換原則告訴咱們不要破壞繼承體系;依賴倒置原則告訴咱們要面向接口編程;接口隔離原則告訴咱們在設計接口的時候要精簡單一;迪米特法則告訴咱們要下降耦合。而開閉原則是總綱,他告訴咱們要對擴展開放,對修改關閉。設計模式


Head First的大白話設計原則架構

  • 找出程序中會變化的方面,而後將其與固定不變的方面相分離(隔離會變化的模塊,並經過其餘原則設計出彈性的、可靈活擴展的代碼)。
  • 針對接口編程,不針對實現編程(經過接口調用,而不是具體的實現調用)。
  • 多用組合,少用繼承。(儘可能不經過繼承獲取某個功能,而是經過組合的方式,獲取)
  • ...


3、如何遵照六原則(引用)

對六原則的遵照不是是和否的問題,而是多和少的問題,也就是說,咱們不會說有沒有遵照,而是遵照程度的多少。任何事情都是過猶不及,設計模式的六原則也同樣,制定六原則不是爲了讓咱們刻板的遵照他們,而須要根據實際狀況去靈活運用。對他們的遵照程度只要在合理範圍內,就算良好的設計了,如下用圖來描述下:框架

圖中的每一條維度各表明一項原則,咱們依據對這項原則的遵照程度在維度上畫一個點,則若是對這項原則遵照的合理的話,這個點應該落在紅色的同心圓內部;若是遵照的差,點將會在小圓內部;若是過分遵照,點將會落在大圓外部。一個良好的設計體如今圖中,應該是六個頂點都在同心圓中的六邊形學習

在上圖中,設計一、設計2屬於良好的設計,他們對六項原則的遵照程度都在合理的範圍內;設計三、設計4設計雖然有些不足,但也基本能夠接受;設計5則嚴重不足,對各項原則都沒有很好的遵照;而設計6則遵照過渡了,設計5和設計6都是迫切須要重構的設計。設計



4、總結

設計模式是很重要的一門技術,若是要提高本身的競爭力,往架構師方向走的話設計模式是必不可少的。目前的Java體系中大量運用了設計模式,如IO的裝飾器模式、Spring IOC的工廠模式,單例模式、Spring MVC的適配器模式、Spring AOP的代理模式,適配器模式等等,學習設計模式能夠幫助本身理解源碼,相對的,學習設計模式時能夠結合現有的Java體系中的設計模式,閱讀其源碼,結合實際應用學習,能夠達到很好的學習效果。代理



參考:code

相關文章
相關標籤/搜索