3.0 KiB
责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 状态模式 策略模式 模板方法模式 访问者模式
命令模式 VS 策略模式
命令模式多了一个接收者角色, 策略模式的意图是封装算法,它认为"算法"已经是一个完整的、不可拆分的原子业务, 即其意图是让这些算法独立,并且可以相互替换,让行为的改变独立于拥有行为的客户; 命令模式是对动作的解耦,把一个动作的执行分为执行对象(接收者)、执行行为(命令角色),让两者相互独立而不相互影响
区别
- 关注点不同
策略模式关注的是算法替换的问题,关注的是算法的完整性,封装性,只有具备了这两个条件才能保证其可以自由切换; 命令模式关注的是解耦问题,如何让请求者解耦是它首先需要解决的,解耦的要就就是把请求的内容封装为一个一个的命令,由接收者执行
- 角色功能不同
策略模式中的具体算法是负责一个完整的算法逻辑,命令模式关注命令的实现,也就是功能的实现
- 使用场景不同
策略模式适用于算法要求变换的场景,命令模式适用于解耦两个由紧耦合关系的对象场合或者多命令撤销的场景
策略模式 VS 状态模式
策略模式封装的是不同的算法,算法之间没有交互,以达到短发可以自由切换的目的; 状态模式封装的是不同的状态,以达到状态切换行为随之发生改变的目的
区别
- 环境角色的职责不同
两者都有一个叫做 Context 环境角色的类,策略模式的环境只是一个委托作用,负责算法的替换; 环境模式的环境角色不仅仅是委托行为,还具有登记状态变化的功能,与具体的状态类协作,共同完成状态切换行为随之切换的任务
- 解决问题的重点不同
策略模式旨在解决内部算法如何改变的问题,也就是将内部算法的改变对外界的影响降低到最小,保证的是算法可以自由切换; 状态模式旨在解决内在状态的改变而引起的行为改变的问题,出发点是事物的状态,封装状态而暴露行为,一个对象的状态改变,在外界来看就好像是行为改变
- 解决问题的方法不同
策略模式只是保证算法可以自由切换,什么时候用算法决定不了; 状态模式对外暴露的是行为,状态的改变一般是由环境角色和具体状态共同完成的,也就是说状态模式封装了状态的变化而暴露了不同的行为或行为结果
- 应用场景不同
策略模式只是一个抽象算法的具体实现类,算法必须是平行的; 状态模式要求是有状态且有行为的场景
- 复杂度不同
策略模式通常比较简单,状态模式通常比较复杂
观察者模式 VS 责任链模式
触发链模式
区别
- 链中的消息对象不同
- 上下节点关系不同
- 消息的分销渠道不同