設計模式 結構與角色



建立模式
Singleton(單例)
Prototype(原型)
Builder(建造者)
Factory(工廠)

行爲模式
Visitor
  • UML
  • Visitor
  • 角色
    • 1.IVisitor 抽象訪問者角色,爲該對象結構中具體元素角色聲明一個訪問操做接口。該操做接口的名字和
      參數標識了發送訪問請求給具休訪問者的具休元素角色,這樣訪問者就能夠經過該元素角色的特定接口直接訪問它。
    • 2.ConcreteVisitor.具體訪問者角色,實現Visitor聲明的接口。
    • 3.Element 定義一個接受訪問操做(accept()),它以一個訪問者(Visitor)做爲參數。
    • 4.ConcreteElement 具體元素,實現了抽象元素(Element)所定義的接受操做接口。
    • 5.ObjectStructure 結構對象角色,這是使用訪問者模式必備的角色。它具有如下特性:
      能枚舉它的元素;能夠提供一個高層接口以容許訪問者訪問它的元素;若有須要,能夠設計成一個
      複合對象或者一個彙集(如一個列表或無序集合)。
Interpreter(解釋器)
Mediator(中介者)
  • UML
  • 角色
    • 1) 抽象中介者(Mediator)角色:抽象中介者角色定義統一的接口用於各同事角色之間的通訊。
    • 2) 具體中介者(Concrete Mediator)角色:具體中介者角色經過協調各同事角色實現協做行爲。爲此它要知道並引用各個同事角色。
    • 3) 同事(Colleague)角色:每個同事角色都知道對應的具體中介者角色,並且與其餘的同事角色通訊的時候,必定要經過中介者角色協做。
Strategy(策略)
  • UML
  • Strategy
  • 角色
    • Strategy類:定義了策略接口,用來約束一系列具體的策略算法。Context使用這個接口調用具體策略實現定義的算法。
    • ConcreteStrategy:具體的策略實現,也就是具體的算法實現
    • Context:上下文,負責和具體的策略類交互,維護一個對Strategy對象的引用。可定義一個接口來讓Strategy訪問他的數據。
  • 優缺點
    • 相關算法系列、提供了能夠替換繼承關係的辦法、消除了一些if else語句、實現的選擇
    • 客戶端必須知道全部的策略類,並自行決定使用那一個策略類、Strategy和Context之間的通訊開銷、策略模式將致使產生不少策略類
State(狀態)
  • UML
  • 角色
    • State類,抽象狀態類,定義一個接口以封裝與Context的一個特定狀態相關的行爲
    • ConcreteState類,具體狀態,每個子類實現一個與Context的一個狀態相關的行爲
    • Context類,維護一個ContcreteState子類的實例,這個實例定義當前的狀態
  • 把Context交給子類來控制,Context保存着下一個狀態的引用,子類來更改這個引用
Command(命令)
  • UML命令模式
  • 角色
    • 客戶端(Client)角色:建立一個具體命令(ConcreteCommand)對象並肯定其接收者
    • 命令(Command)角色:聲明瞭一個給全部具體命令類的抽象接口
    • 具體命令(ConcreteCommand)角色:定義一個接收者和行爲之間的弱耦合;實現execute()方法,負責調用接收者的響應操做。execute()執行方法
    • 請求者(Invoker)角色:負責調用命令對象執行請求,相關的方法叫作行動方法。
    • 接收者(Receiver)角色:負責具體實施和執行一個請求。任何一個類均可以成爲接收者,實施和請求的方法叫作行動方法。
Chain of Responsibility(職責鏈)
  • UML
  • 角色
    • 抽象處理者(Handler
Observer(觀察者)
  • UML
  • 角色
    • Subject類,抽象主題角色:把全部對觀察者對象的引用保存在一個集合中,每一個抽象主題角色均可以有任意數量的觀察者。抽象主題提供一個接口,能夠增長和刪除觀察者角色。
    • Observer類,抽象觀察者角色:爲全部具體的觀察者定義一個接口,在獲得主題的通知時更新本身
    • ConcreteSubject類,具體主題角色,在內部狀態改變時,給全部等級過的觀察者發出通知。
    • ConcreteObserver類,具體觀察者角色,實現抽象觀察者角色所須要的更新接口,以便使自己的狀態與主題的狀態相協調。若是須要,具體觀察者角色能夠保存一個指向具體主題角色的引用。
  • 優缺點
    • 觀察者和被觀察者之間簡歷一個抽象的耦合,觀察者模式支持廣播通信。
    • 若是觀察者過多,將全部的觀察者都通知到會話費不少時間;若是被觀察者之間有循環依賴,會致使系統崩潰;若是是線程異步投遞,系統必須保證投遞是以自恰的方式進行的;寡女哈着不知道所觀察的對象是怎麼發生變化的。
Memento(備忘機制)
  • UML
  • Memento
  • 角色
    • Originator類,當前操做對象,添加setMemento createMemento方法
    • Memento類,做爲保存對象的備忘錄物件
    • Caretaker類,保留原發者所創造的備忘錄物件
  • 優缺點
    • 在須要提供保存、恢復對象狀態的類中,必須提供兩個方法:.保存對象當前狀態方法:將對象自身(this)做爲參數傳入,建立備忘錄。.恢復對象以前狀態的方法:取出備忘錄/接收一個備忘錄對象,從中獲取對象以前的狀態
Template(模版)
  • UML
  • 角色
    • 具體類靠抽象類中的模板方法來完成算法中不變的部分。
    • 模板方法致使一種反向的控制結構,即父類調用子類的方法。模板方法調用下列類型的操做: 具體的操做,具體的 AbstractClass 的操做,原語操做,鉤子操做等。

結構模式
Flyweight(享元)
  • UML
  • Flyweight模式
  • 角色
    • Flyweight接口(抽象類):定義了一個可共享的元類
    • Flyweight實現類:實現了元類中的操做,並且可能會提供一個用於保存內部狀態(共享屬性)的空間
    • Flyweight Factory:建立Flyweight的工廠類,建立後將其保存到FlyweightPool中
    • Flyweight Pool:緩衝Flyweight對象的池,一般包含在工廠類中(Hashtable)
Bridge
  • UML
  • 角色
    • 抽象化(Abstraction)角色:抽象化給出的定義,並保存一個對實現化對象的引用
    • 修正抽象化(Refined Abstraction)角色:擴展抽象化角色,改變和修正父類對抽象化的定義。
    • 實現化(Implementor)角色:這個角色給出實現化角色的接口,但不給出具體的實現。必須指出的是,這個接口不必定和抽象化角色的接口定義相同,實際上,這兩個接口能夠很是不同。實現化角色應當只給出底層操做,而抽象化角色應當只給出基於底層操做的更高一層的操做。
    • 具體實現化(Concrete Implementor)角色:這個角色給出實現化角色接口的具體實現。
Decorator(裝飾)
  • UML
  • 角色
    • Component抽象接口類,定義 一個接口,能夠給這些對象動態地添加職責。
    • ConcreteComponent,定義一個對象,能夠給這個對象添加一些職責。
    • Decorator,維持一個只想Component對象的指針,並定義一個與Component接口一致的接口,將請求轉發給它的Component對象,並有可能在轉發請求先後執行一些附加的動做。
    • ConcreteDecorator,像組件添加職責
Composite(組合)
  • UML
  • 角色
    • 抽象構建角色(component):是組合中的對象聲明接口,在適當的狀況下,實現全部類共有接口的默認行爲。聲明一個接口用於訪問和管理component子部件。
    •  樹葉構件角色(Leaf):在組合樹中表示葉節點對象,葉節點沒有子節點。並在組合中定義圖元對象的行爲
    •   樹枝構件角色(Composite):定義有子部件的那些部件的行爲。存儲子部件。在Component接口中實現與子部件有關的操做。
    •  客戶角色(Client):經過component接口操縱組合部件的對象。  
Adapter(適配器)
  • UML(類適配器、對象適配器)
  • 角色
Proxy(代理)
  • UML
  • Proxy
  • 角色
    • 抽象角色:聲明真實對象和代理對象的共同接口;
    • 代理角色:代理對象角色內部含有對真實對象的引用,從而能夠操做真實對象,同時代理對象提供與真實對象相同的接口以便在任什麼時候刻都能代替真實對象。同時,代理對象能夠在執行真實對象操做時,附加其餘的操做,至關於對真實對象進行封裝。
    • 真實角色:代理角色所表明的真實對象,使咱們最終要引用的對象。
  • 實用性
    • 在須要用比較通用和複雜的對象指針代替簡單的指針的時候,使用 Proxy模式。下面是一些可使用Proxy模式常見狀況:
    • 1) 遠程代理(Remote  Proxy)爲一個位於不一樣的地址空間的對象提供一個本地的代理對象。這個不一樣的地址空間能夠是在同一臺主機中,也但是在另外一臺主機中,遠程代理又叫作大使(Ambassador)
    • 2) 虛擬代理(Virtual Proxy)根據須要建立開銷很大的對象。若是須要建立一個資源消耗較大的對象,先建立一個消耗相對較小的對象來表示,真實對象只在須要時纔會被真正建立。 
    • 3) 保護代理(Protection Proxy)控制對原始對象的訪問。保護代理用於對象應該有不一樣的訪問權限的時候。
    • 4) 智能指引(Smart Reference)取代了簡單的指針,它在訪問對象時執行一些附加操做。
    • 5) Copy-on-Write代理:它是虛擬代理的一種,把複製(克隆)操做延遲到只有在客戶端真正須要時才執行。通常來講,對象的深克隆是一個開銷較大的操做,Copy-on-Write代理可讓這個操做延遲,只有對象被用到的時候才被克隆。 
Facade(外觀)
  • UML




相關文章
相關標籤/搜索