设计模式 结构与角色



建立模式
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




相关文章
相关标签/搜索