行为型模式
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,涉及算法与对象间职责的分配。
行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分配行为,后者采用组合或聚合在对象间分配行为。由于组合或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。
包括:
1、模板方法
2、策略模式
3、命令模式
4、职责链模式
5、状态模式
6、观察者模式
7、中介者模式
8、迭代器模式
9、访问者模式
10、备忘录模式
11、解释器模式
除了模板方法和解释器模式是类行为型模式,其余都是对象行为型模式
状态模式
对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为
结构
1、环境
2、抽象状态
3、具体状态
优点
1、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为
2、允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块
缺点:
1、会增加系统类和对象的个数
2、结构和实现比较复杂,使用不当会导致程序结构和代码的混乱
3、对开闭原则的之处并不太好
观察者模式
又被称为发布-订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己
结构
1、抽象主题
2、具体主题
3、抽象观察者
4、具体观察者
优点
缺点:
中介者模式
又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互
结构
1、抽象中介者
2、具体中介者
3、抽象同事类
4、具体同事类
优点
缺点:
迭代器模式
提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部展示
结构
1、抽象聚合
2、具体聚合
3、抽象迭代器
4、具体迭代器
优点
缺点
访问者模式
封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作
结构
1、抽象访问者
2、具体访问者
3、抽象元素
4、具体元素
5、对象结构
备忘录模式
又叫快照模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。
结构
“白箱”备忘录
备忘录角色对任何对象都提供一个接口,即宽接口,备忘录角色的内部所存储的状态就对所有对象公开。
“黑箱”备忘录
备忘录角色对发起人对象提供一个宽接口,而为其他对象提供一个窄接口。在Java语言中,实现双重接口的办法就是将备忘录类设计成发起人类的内部成员类。
优点
解释器模式
给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。
在解释器模式中,需要将待解决的问题,提取出规则,抽象为一种“语言”。比如加减法运算,规则为:由数值和±符号组成的合法序列,“1+3-2” 就是这种语言的句子。
解释器就是要解析出来语句的含义。但是如何描述规则呢?
文法(语法规则)
抽象语法树
结构
优点
缺点