行为模式
Visitor
- UML
-
- 角色
- 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类:定义了策略接口,用来约束一系列具体的策略算法。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
-
- 角色
Observer(观察者)
- UML
- 角色
- Subject类,抽象主题角色:把全部对观察者对象的引用保存在一个集合中,每一个抽象主题角色均可以有任意数量的观察者。抽象主题提供一个接口,能够增长和删除观察者角色。
- Observer类,抽象观察者角色:为全部具体的观察者定义一个接口,在获得主题的通知时更新本身
- ConcreteSubject类,具体主题角色,在内部状态改变时,给全部等级过的观察者发出通知。
- ConcreteObserver类,具体观察者角色,实现抽象观察者角色所须要的更新接口,以便使自己的状态与主题的状态相协调。若是须要,具体观察者角色能够保存一个指向具体主题角色的引用。
- 优缺点
- 观察者和被观察者之间简历一个抽象的耦合,观察者模式支持广播通信。
- 若是观察者过多,将全部的观察者都通知到会话费不少时间;若是被观察者之间有循环依赖,会致使系统崩溃;若是是线程异步投递,系统必须保证投递是以自恰的方式进行的;寡女哈着不知道所观察的对象是怎么发生变化的。
Memento(备忘机制)
- UML
-
- 角色
- Originator类,当前操做对象,添加setMemento createMemento方法
- Memento类,做为保存对象的备忘录物件
- Caretaker类,保留原发者所创造的备忘录物件
- 优缺点
- 在须要提供保存、恢复对象状态的类中,必须提供两个方法:.保存对象当前状态方法:将对象自身(this)做为参数传入,建立备忘录。.恢复对象以前状态的方法:取出备忘录/接收一个备忘录对象,从中获取对象以前的状态
Template(模版)
- UML
-
- 角色
- 具体类靠抽象类中的模板方法来完成算法中不变的部分。
-
模板方法致使一种反向的控制结构,即父类调用子类的方法。模板方法调用下列类型的操做:
具体的操做,具体的
AbstractClass
的操做,原语操做,钩子操做等。
结构模式