【軟件構造】第六章第二節 可維護的設計模式

第六章第二節 可維護的設計模式

Outline

  • 創造性模式:Creational patterns
    • 工廠模式(Factory Pattern)
    • 抽象工廠模式(Abstract Factory Pattern)
    • 建造者模式(Builder Pattern)
  • 結構化模式:Structural patterns
    • 橋接模式(Bridge Pattern)
    • 代理模式(Proxy Pattern)
    • 組合模式(Composite Pattern)
  • 行爲化模式:Behavioral patterns
    • 中介者模式(Mediator Pattern)
    • 觀察者模式(Observer Pattern)
    • 訪問者模式(Visitor Pattern)
    • 責任鏈模式(Chain of Responsibility Pattern)
    • 命令模式(Command Pattern)

Notes:

## 創造性模式:Creational patterns

 【工廠模式(Factory Pattern)】html

  • 定義:工廠方法模式也被稱爲虛擬構造器。當client不知道要建立哪一個具體類的實例,或者不想在client代碼中指明要具體建立的實例時,用工廠方法。
  • 意圖:定義一個用於建立對象的接口,讓其子類來決定實例化哪個類,從而使一個類的實例化延遲到其子類。
  • 主要解決:主要解決接口選擇的問題。
  • 應用實例: 您須要一輛汽車,能夠直接從工廠裏面提貨,而不用去管這輛汽車是怎麼作出來的,以及這個汽車裏面的具體實現。
  • 優勢:
    • 一個調用者想建立一個對象,只要知道其名稱就能夠了。
    • 擴展性高,若是想增長一個產品,只要擴展一個工廠類就能夠。
    • 屏蔽產品的具體實現,調用者只關心產品的接口。
  • 缺點:每次增長一個產品時,都須要增長一個具體類和對象實現工廠,使得系統中類的個數成倍增長,在必定程度上增長了系統的複雜度,同時也增長了系統具體類的依賴。這並非什麼好事。
  • 知足OCP(Open-Closed Principle):—對擴展的開放,對修改已有代碼的封閉
  • 模式:

  • 例子:

 非靜態方法:算法

靜態方法:設計模式

 

【抽象工廠模式(Abstract Factory)】ide

  • 定義:抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠建立其餘工廠。該超級工廠又稱爲其餘工廠的工廠。
  • 在抽象工廠模式中,接口是負責建立一個相關對象的工廠,不須要顯式指定它們的類。每一個生成的工廠都能按照工廠模式提供對象。
  • 方法:提供接口以建立一組相關/相互依賴的對象,但不須要指明其具體類。
  • 用途:系統的產品有多於一個的產品族,而系統只消費其中某一族的產品時使用。例:①當一個UI,包含多個窗口控件,這些控件在不一樣的OS中實現不一樣。②當一個倉庫類,要控制多個設備,這些設備的製造商各有不一樣,控制接口有差別
  • 優勢:當一個產品族中的多個對象被設計成一塊兒工做時,它能保證客戶端始終只使用同一個產品族中的對象。
  • 缺點:產品族擴展很是困難,要增長一個系列的某一產品,既要在抽象的 Creator 里加代碼,又要在具體的裏面加代碼。
  • 使用場景: 一、QQ 換皮膚,一整套一塊兒換。 二、生成不一樣操做系統的程序。
  • 如下面窗口滾動條爲例:

  客戶端想要一個產品,由窗口和滾動條組成。因而能夠交給一個抽象工廠來作,這個工廠負責將產品的組件組裝起來成一個完整的產品。不一樣的產品繼承這個抽象工廠接口,實現本身的工廠方法。ui

  下面是具體的實現spa

  抽象工廠類型建立的不是一個完整產品,而是「產品族」(遵循 固定搭配規則的多類產品的實例),獲得的結果是:多個不一樣產品的 object,各產品建立過程對client可見,但「搭配」不能改變。操作系統

  本質上,Abstract Factory是把多類產品的factory method組合在一塊兒。設計

 

【建造者模式(Builder Pattern)】代理

  • 定義:建造者模式(Builder Pattern)使用多個簡單的對象一步一步構建成一個複雜的對象。該 Builder 類是獨立於其餘對象的。
  • 方法:建立複雜對象,包含多個組成部分
  • 意圖:將一個複雜的構建與其表示相分離,使得一樣的構建過程能夠建立不一樣的表示。
  • 關鍵代碼:建造者:建立和提供實例,導演:管理建造出來的實例的依賴關係。
  • 應用實例: 一、去肯德基,漢堡、可樂、薯條、炸雞翅等是不變的,而其組合是常常變化的,生成出所謂的"套餐"。 二、JAVA 中的 StringBuilder。 
  • 優勢: 一、建造者獨立,易擴展。 二、便於控制細節風險。
  • 缺點: 一、產品必須有共同點,範圍有限制。 二、如內部變化複雜,會有不少的建造類。
  • 模式圖:

 

  • 例子: 咱們須要一個Pizza的產品,該Pizza產品的part是以三個屬性的形式體現,其builder就至關於給三個屬性賦值(也可更復雜)。

 

比較:工廠抽象模式(Factory method)和構造器模式(Builder method)

  Abstract Factory建立的不是一個完整產品,而是「產品族」(遵循固定搭配規則的多類產品實例),獲得的結果是:多個不一樣產品的實例object,各產品建立過程對client可見,但「搭配」不能改變。server

  Builder Factory建立的是一個完整的產品,有多個部分組成,client不需瞭解每一個部分是怎麼建立、各個部分怎麼組合,最終獲得一個產品的完整 object 。

比較:模板方法模式(Template method)和構造器模式(Builder method)

  • Template Method:a behavioral pattern 目標是爲了複用算法的公共結構(次序)。
    • 定義了一個操做中算法的骨架(steps),而將具體步驟的實現延遲到子類中, 從而複用算法的結構並可從新定義算法某些特定步驟的實現邏輯。
    • 複用算法骨架,強調步驟的次序
    • 子類override算法步驟
  • Builder Factory:a creationalpattern 目標是「建立複雜對象」,靈活擴展
    • 將一個複雜對象的構造方法與對象內部的具體表示分離出來,一樣的構造方法能夠創建不一樣的表現。
    • 不強調複雜對象內部各部分的「次序」
    • 子類override複雜對象內部各部分的「建立」
    • 適應變化:經過派生新的builder來構造新的對象(即新的內部表示),OCP

 

## 結構化模式:Structual patterns

【橋接模式(Bridge Pattern)】

【代理模式(Proxy Pattern)】

【組合模式(Composite Pattern)】

 

## 行爲化模式:Behavioral patterns

【中介者模式(Mediator Pattern)】

【觀察者模式(Observer Pattern)】

【訪問者模式(Visitor Pattern)】

【責任鏈模式(Chain of Responsibility Pattern)】

【命令模式(Command Pattern)】

相關文章
相關標籤/搜索