行为型模式( Behavioral Patterns )关注对象之间的通信

观察者模式
观察者模式是定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属(Dependents)模式。
优点
• 观察者模式可以实现表示层和数据逻辑层的分离,并定义了稳定的消息更新传递机制,抽象了更新接口,使得可以有各种各样不同的表示层作为具体观察者角色;
• 观察者模式在观察目标和观察者之间建立一个抽象的耦合;
• 观察者模式支持广播通信;
• 观察者模式符合开闭原则(对拓展开放,对修改关闭)的要求。
缺点
• 如果一个观察目标对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间;
• 如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃;
• 观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。

模板模式
模板方法模式是指定义一个模板结构,将具体内容延迟到子类去实现。
优点
• 提高代码复用性:将相同部分的代码放在抽象的父类中,而将不同的代码
放入不同的子类中;
• 实现了反向控制:通过一个父类调用其子类的操作,通过对子类的具体实
现扩展不同的行为,实现了反向控制并且符合开闭原则。

模式的应用场景

模板方法模式通常适用于以下场景。

  1. 算法的整体步骤很固定,但其中个别部分易变时,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。
  2. 当多个子类存在公共的行为时,可以将其提取出来并集中到一个公共父类中以避免代码重复。首先,要识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
  3. 当需要控制子类的扩展时,模板方法只在特定点调用钩子操作,这样就只允许在这些点进行扩展。

场景:审单流程,jdbcTemplate

策略模式
策略模式是指定义一系列算法,将每个算法都封装起来,并且使他们之间可以相互替换。
优点:遵循了开闭原则,扩展性良好。
缺点:随着策略的增加,对外暴露越来越多。

责任链模式、
命令模式、
中介者模式、

状态模式、

空对象模式、
备忘录模式、
迭代器模式、
解释器模式、
访问者模式