設計模式學習

參考出處:https://www.cnblogs.com/zhili/p/DesignPatternSummery.htmlhtml

類設計的幾個原則算法

單一職責原則、開放封閉原則、里氏代替原則、依賴倒置原則、接口隔離原則、合成複用原則和迪米特法則。編程

1.單一職責原則設計模式

      就一個類而言,應該只有一個引發它變化的緣由。若是一個類承擔的職責過多,就等於把這些職責耦合在一塊兒,一個職責的變化可能會影響到其餘的職責,另外,把多個職責耦合在一塊兒,也會影響複用性。函數

2.開閉原則優化

  開閉原則即OCP(Open-Closed Principle縮寫)原則,該原則強調的是:一個軟件實體(指的類、函數、模塊等)應該對擴展開放,對修改關閉。即每次發生變化時,要經過添加新的代碼來加強現有類型的行爲,而不是修改原有的代碼。spa

  符合開閉原則的最好方式是提供一個固有的接口,而後讓全部可能發生變化的類實現該接口,讓固定的接口與相關對象進行交互。設計

3.里氏代替原則代理

指的是子類必須替換掉它們的父類型 。也就是說,在軟件開發過程當中,子類替換父類後,程序的行爲是同樣的。只有當子類替換掉父類後,此時軟件的功能不受影響時,父類才能真正地被複用,而子類也能夠在父類的基礎上添加新的行爲。爲了就來看看違反了LSP原則的例子,具體代碼以下所示:htm

4.依賴倒置原則

原則指的是抽象不該該依賴於細節,細節應該依賴於抽象,也就是提出的 「面向接口編程,而不是面向實現編程」。這樣能夠下降客戶與具體實現的耦合。

5.接口隔離原則

接口隔離原則(Interface Segregation Principle, ISP)指的是使用多個專門的接口比使用單一的總接口要好。也就是說不要讓一個單一的接口承擔過多的職責,而應把每一個職責分離到多個專門的接口中,進行接口分離。過於臃腫的接口是對接口的一種污染。

6.就是在一個新的對象裏面使用一些已有的對象,使之成爲新對象的一部分。新對象經過向這些對象的委派達到複用已用功能的目的。簡單地說,就是要儘可能使用合成/聚合,儘可能不要使用繼承。

7.迪米特法則

指的是一個對象應當對其餘對象有儘量少的瞭解。也就是說,一個模塊或對象應儘可能少的與其餘實體之間發生相互做用,使得系統功能模塊相對獨立,這樣當一個模塊修改時,影響的模塊就會越少,擴展起來更加容易。

設計模式的類型區分

 1.建立型模式

 建立型模式就是用來建立對象的模式,抽象了實例化的過程。全部的建立型模式都有兩個共同點。第一,它們都將系統使用哪些具體類的信息封裝起來;第二,它們隱藏了這些類的實例是如何被建立和組織的。建立型模式包括單例模式、工廠方法模式、抽象工廠模式、建造者模式和原型模式。

  • 單例模式:解決的是實例化對象的個數的問題,好比抽象工廠中的工廠、對象池等,除了Singleton以外,其餘建立型模式解決的都是 new 所帶來的耦合關係。
  • 抽象工廠:建立一系列相互依賴對象,並能在運行時改變系列。
  • 工廠方法:建立單個對象,在Abstract Factory有使用到。
  • 原型模式:經過拷貝原型來建立新的對象。

2.結構型模式

結構型模式,顧名思義討論的是類和對象的結構 ,主要用來處理類或對象的組合。它包括兩種類型,一是類結構型模式,指的是採用繼承機制來組合接口或實現;二是對象結構型模式,指的是經過組合對象的方式來實現新的功能。它包括適配器模式、橋接模式、裝飾者模式、組合模式、外觀模式、享元模式和代理模式。

  • 適配器模式注重轉換接口,將不吻合的接口適配對接 
  • 橋接模式注重分離接口與其實現,支持多維度變化 
  • 組合模式注重統一接口,將「一對多」的關係轉化爲「一對一」的關係 
  • 裝飾者模式注重穩定接口,在此前提下爲對象擴展功能 
  • 外觀模式注重簡化接口,簡化組件系統與外部客戶程序的依賴關係 
  • 享元模式注重保留接口,在內部使用共享技術對對象存儲進行優化 
  • 代理模式注重假借接口,增長間接層來實現靈活控制

3.行爲型模式

行爲型模式是對在不一樣對象之間劃分責任和算法的抽象化。行爲模式不單單關於類和對象,還關於它們之間的相互做用。行爲型模式又分爲類的行爲模式和對象的行爲模式兩種。

  • 類的行爲模式——使用繼承關係在幾個類之間分配行爲。
  • 對象的行爲模式——使用對象聚合的方式來分配行爲。

  行爲型模式包括11種模式:模板方法模式、命令模式、迭代器模式、觀察者模式、中介者模式、狀態模式、策略模式、責任鏈模式、訪問者模式、解釋器模式和備忘錄模式。

  • 模板方法模式:封裝算法結構,定義算法骨架,支持算法子步驟變化。
  • 命令模式:注重將請求封裝爲對象,支持請求的變化,經過將一組行爲抽象爲對象,實現行爲請求者和行爲實現者之間的解耦。
  • 迭代器模式:注重封裝特定領域變化,支持集合的變化,屏蔽集合對象內部複雜結構,提供客戶程序對它的透明遍歷。
  • 觀察者模式:注重封裝對象通知,支持通訊對象的變化,實現對象狀態改變,通知依賴它的對象並更新。
  • 中介者模式:注重封裝對象間的交互,經過封裝一系列對象之間的複雜交互,使他們不須要顯式相互引用,實現解耦。
  • 狀態模式:注重封裝與狀態相關的行爲,支持狀態的變化,經過封裝對象狀態,從而在其內部狀態改變時改變它的行爲。
  • 策略模式:注重封裝算法,支持算法的變化,經過封裝一系列算法,從而能夠隨時獨立於客戶替換算法。
  • 責任鏈模式:注重封裝對象責任,支持責任的變化,經過動態構建職責鏈,實現事務處理。
  • 訪問者模式:注重封裝對象操做變化,支持在運行時爲類結構添加新的操做,在類層次結構中,在不改變各種的前提下定義做用於這些類實例的新的操做。
  • 備忘錄模式:注重封裝對象狀態變化,支持狀態保存、恢復。
  • 解釋器模式:注重封裝特定領域變化,支持領域問題的頻繁變化,將特定領域的問題表達爲某種語法規則下的句子,而後構建一個解釋器來解釋這樣的句子,從而達到解決問題的目的。

23種設計模式,其實前輩們總結出來解決問題的方式,它們追求的宗旨仍是保證系統的低耦合高內聚,指導它們的原則無非就是封裝變化,責任單一,面向接口編程等設計原則

相關文章
相關標籤/搜索