2021-07-26观察者模式与建造者模式

观察者模式

定义

观察者模式(Observer Pattern),又叫发布-订阅模式,定义一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听,使得主题对象状态变化时,所有依赖于它的对象都会得到通知并自动更新,实现了观察者和被观察者之间的解耦,如消息订阅,属于行为型模式。

通用写法

观察者模式主要包含4种角色:

  • 被观察的对象(Observable):该角色是一个抽象类或接口,定义了增加、删除、通知观察者对象的方法;

  • 具体被观察者:当前状态变化时,会通知已注册的观察者;

  • 抽象观察者(Observer):定义了响应通知的更新方法;

  • 具体观察者(ConcreteObserver):状态更新时,会自动做出响应。

观察者模式.png
//TODO 代码编写

适用场景

观察者使用场景.png

代码中涉及到回调的一般是观察者模式,如Spring中的责任链

观察者和被观察者通常通过反射来进行解耦

源码中一般通过Listenter关键词判断是否为观察者模式

观察者可以给被观察者以响应(回调)

源码

Guava

观察者模式优缺点

观察者模式优点.png
观察者模式缺点.png

问题

  • 用Guava API实现GPer社区提问通知的业务场景。

  • 访问者模式精髓是什么?
    访问者模式精髓.png

建造者模式

定义:

建造者模式(Builder Pattern)是将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示。

特征:用户只需指定需要建造的类型就可以获得对象,建造过程及细节无需了解,属于创建型模式。

建造者模式适用于创建对象需要很多步骤,但是步骤的顺序不一定固定。

应用场景

  • 适用于创建对象需要很多步骤,但是步骤的顺序不一定固定,如:责任链

  • 如果一个对象有非常复杂的内部结构(很多属性)

  • 把复杂对象的创建和使用分离。

通用写法

建造者模式主要包含4个角色:

  • 产品(Product):创建的产品类对象;

  • 建造者抽象(Builder):建造者的抽象类,规范产品对象的各个组成部分的建造,一般由子类实现具体的建造过程。

  • 建造者(ConcreteBuilder):具体的Builder类,根据不同的业务逻辑,具体化对象的各个组成部分的创建。

  • 调用者(Director):调用具体的建造者,来创建对象的各个部分,在指导中不涉及具体产品信息,只负责保证对象各个部分完整创建或按某种顺序创建。

链式编程.png

源码

StringBuilder、chain(责任链)、SqlSessionFactory、ServerSocketChannel

Sql语句拼接.png

建造者模式优缺点

优点:

  • 封装性好,创建和使用分离;

  • 扩展性好,建造类之间独立,一定程度上解耦。

缺点:

  • 产生多余的Builder对象

  • 产品内部发生变化,建造者都要修改,成本较大

建造者与工厂的区别.png

问题

  • 请列举1-3个需要用到建造者模式的业务场景。

你可能感兴趣的:(2021-07-26观察者模式与建造者模式)