设计模式之禅笔记

设计模式PK

创建类模式PK

工厂方法模式 VS 建造者模式

工厂方法模式注重的是整体对象的创建方法。建造者模式注重的是部件构建过程

工厂方法模式的对象粒度较粗,建造者模式的产品对象粒度较细。

抽象工厂模式 VS 建造者模式

抽象工厂模式也是注重产品的整体,不关心具体内部的构建过程。

结构类模式PK

代理模式 VS 装饰者模式

装饰模式是代理模式的一个特殊应用。两者的相同点是代理类与目标类都具有相同的接口,不同点是代理模式着重对代理过程的控制,而装饰者模式则是对类的功能进行加强或减弱,它注重类的功能变化。

代理模式是把当前的行为或功能委托给其他对象执行,代理类负责接口限定:是否可以调用真实角色,以及是否对发送到真实角色的消息进行变形处理,它不对主题角色(被代理类,目标类)的功能做任何处理。代理模式的极致就是AOP。

装饰者模式是在保证接口不变的情况下加强类的功能,它保证修饰后的对象功能比原始对象增强。不做准入条件判断和准入参数过滤。

JAVA IO 包大量使用了装饰者模式,InputStream等。

装饰者模式 VS 适配器模式

两者在类图上差别比较大,但是功能有相似的地方:都是包装,都是通过委托方式实现其功能。不同点是:装饰者包装的是相同接口的类。适配器模式则包装的是非相同接口的类。

不同

意图不同:装饰者模式加强功能,适配器模式则关注接口的转换。

包装对象不同:装饰者模式包装相同接口的类,适配器模式则是不同接口的类

场景不同:装饰者模式在需要增强的时候用,适配器是在对现有类无法改造的情况下使用

扩展性不同:装饰者模式容易扩展。适配器模式是一个转换桥梁。

行为类模式PK

命令模式 VS 策略模式

策略模式的意图是封装算法,它认为算法是完整的,不同策略之间是可替换的。

命令模式则是对动作的解耦,把一个动作分为执行对象(接收者角色),执行行为(命令角色),让2者相互独立而不互相影响。

总结

关注点不同:策略模式关注的是算法替换的问题。命令模式关注的是解耦的问题

角色功能不同:策略模式中的具体算法是一个完整的算法逻辑,它是不可拆分的。命令模式,它关注命令的实现,

使用场景不同:策略模式适用于算法要求变更的场景。命令模式适用于解耦2个对象的场景

策略模式 VS 状态模式

两者的类图很相似。但是,策略模式封装的是算法,算法之间没有交互,以达到算法可以自由切换的目标,而状态模式封装的是不同的状态,以达到状态变换,行为也变换

总结

  • 环境角色(context)的职责不同:

策略模式的context只是一个委托作用,负责算法的切换。状态模式的context需要登记状态的变化,与具体的状态类协作,共同完成状态切换行为随之切换的的任务。

  • 解决问题的重点不同:

策略模式主要解决内部算法切换的问题,保证内部算法改变对外界的影响降低最低,保证算法可以自由切换。状态模式主要解决状态变化而引起的行为变化。

  • 解决问题的方法不同:

策略模式只保证方法可切换,但是不决定用什么算法。状态模式对外暴露的是行为,状态的变化一般是由context和具体状态共同完成的。

  • 应用场景不同:

策略模式可以是一个对象,也可以是一个算法。算法必须是平行的。状态模式则要求有一系列的状态发生变化的场景,它要求是有状态有行为的场景。

  • 复杂度不同:

策略模式简单,状态模式复杂。

观察者模式 VS 责任链模式

相同点:都实现了事务的链条化处理。

总结

  • 链中的消息对象不同:

责任链中,传递过程中消息不变。观察者模式,可以根据需要变化消息格式。

  • 上下节点的关系不同:

责任链中,下级完全不关心上级是什么。观察者模式中,需要了解2者关系。

责任链中,消息从头到尾,一个方向。观察者模式,消息可以跳跃传递,也可以广播等。

跨模式PK

门面模式 VS 中介者模式

门面模式为复杂的子系统提供一个统一的访问界面,它定义的是一个高层接口,该接口使得子系统更加容易使用,避免外部模块深入到子系统内部而产生与子系统内部细节耦合的问题。

中介者模式使用一个中介对象来封装一系列同事对象的交互行为,它使各对象之间不再显式地引用,从而使其耦合松散,建立一个可扩展的应用架构。

总结

门面模式是以封装和隔离为主要任务,而中介者模式是以调和同事类之间的关系为主,因为要协调,所以有了部分逻辑控制。两者主要差异:

  • 功能区别:

门面模式只是增加了一个门面,它对于子系统来说没有增加任何功能。中介者模式也业务功能,它把同事类之间的耦合移到了中介者,同事类不可能脱离中介者而独立。

  • 知晓状态不同:

门面模式,子系统不知道门面存在。中介者模式,每个同事类都知道中介者存在。

  • 封装程度不同:

门面模式是简单封装,每个请求都会到子系统。中介者模式,需要有一个中心,由中心协调同事类。

设计模式混编

新模式

规格模式

LINQ

Mybatis 中Criteria

对象池模式

黑板模式

mq,发布/订阅

附录

彩图

设计模式之禅笔记_第1张图片

设计模式之禅笔记_第2张图片

设计模式之禅笔记_第3张图片

设计模式之禅笔记_第4张图片

你可能感兴趣的:(内功心法,设计模式,策略模式,代理模式)