# 行为型设计模式
# 责任链模式
行为设计模式,请求按处理者链路进行发送,每个处理者均可能请求进行处理,或传递给链条下个处理者
# 命令模式
行为设计模式,将请求转换为一个包含与请求相关所有信息的独立对象,可根据不同的请求将方法参数化、延迟请求执行,或将其放入队列中,且能实现可撤销操作
# 迭代器模式
行为设计模式,在不暴露集合底层表现形式情况下遍历集合中所有元素
- 隐藏复杂度
- 减少重复遍历代码
- 遍历不同甚至无法预知的数据结构
# 中介者模式
行为设计模式,减少对象间混乱无序的依赖关系,限制对象之前互相交互,迫使它们通过一个中介者对象进行合作。特定状态知道与其它状态的关系
# 备忘录模式
# 适配器模式
# 状态模式
在一个对象内部状态变化时改变其行为,使其看上去就像改变了自己所属的类一样
状态模式建议为对象所有可能状态新建一个类,然后将所有状态的对应行为抽取到这些类中
例如手机按键与开关的关系
- 解锁状态:按下按键执行各种功能
- 锁定状态:按下任何键都解锁屏幕
- 电量不足:按下任何键都显示充电页面
实现:
- 上下文:Context,保存一个具体状态对象的引用,并将所有与此状态相关的工作委派给它。上下文通过状态接口与状态对象交互,且会提供一个设置器用于传递新的状态对象。
- 状态:State,声明特定于状态的方法,这些方法能被其它所有具体状态所理解
- 具体状态:Concrete States,自行实现特定与状态的方法,为避免多个状态中包含相似的代码,可提供一个封装部分通用行为的中间抽象类
# 模板方法
行为模式,在超类中定义了一个算法的框架,允许子类在不个性结构的情况下重写算法的特定步骤
# 访问者模式
将算法与所作用的对象隔离开
# 策略模式
行为设计模式,定义一系列算法,并将不同的算法放入独立的类中,以使算法的对象能相互替换。
- 上下文:Context,维护指向策略的引用,仅通过策略接口与该对象进行交互
- 策略:Strategy,所有具体策略的通用接口,它声明了一个上下文用于执行策略的方法
- 上下文需要运行算法时,在其已连接的策略对象上调用执行方法,上下文不清楚所涉及的策略类型与算法的执行方式
优点:
- 运行时切换对象内的算法
- 算法实现与使用算法的代码隔离
- 组合代替继承
- 开闭原则,无需对上下文进行修改引入新的策略
缺点:
- 算法极少改变,没有必要引入新的类和接口。使用它会让程序变得复杂
- 客户端必须知晓策略间的不同,因为它要选择策略
- 使用函数的方式和使用策略完全相同,而又无需要借助额外的类和接口,使代码更简洁