建造者模式

建造者模式(Builder Pattern)

  是将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示

  属于创建型模式

  对于用户而言,只需指定需要建造的类型就可以获得对象,不需要了解建造过程和细节

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

  建造者经常与泛型一起用于构建统一的返回格式

  建造者模式的设计主要有四个角色:

    1、产品(Product): 要创建的产品类对象

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

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

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

  适用场景:

    1、相同的方法,不同的执行顺序,产生不同的结果时

    2、多个部件或零件,都可以装配到一个对象中,但是产生的结果又不相同

    3、产品类非常复杂,或者产品类中调用顺序不同产生不同的作用

    4、当初始化一个对象特别复杂,参数多,而且很多参数都具有默认值时

  基本写法

    链式写法

  应用案例:

    参考开源框架JPA的Sql构造模式

    用建造者 QueryRuleSqlBuilder 将复杂的构造Sql过程进行封装
    用 QueryRule 对象专门保存 Sql查询时的条件
    最后根据查询条件,自动生成Sql语句

    源码:pattern.builder.sql

  源码中的体现:

  JDK: StringBuilder

  MyBatis: CacheBuilder、SqlSessionFactoryBuilder

  Spring: BeanDefinitionBuilder

  优点:
    封装性好,创建于使用分离

    拓展性好,建造类之间独立、一定程度上解耦

  缺点:
    产生多余的 Builder 对象

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

  建造者模式 与 工厂模式 的区别

    建造者更注重方法的调用顺序,工厂模式更注重创建对象

    创建对象的力度不同,建造者创建复杂的对象,由各种复杂的部件组成,创建的对象结果也不同,而工厂模式创建的都一样

    关注重点不一样,工厂模式只需要把对象创建出来就可以了,而建造者模式不仅要创建出这个对象,还要知道这个对象由哪些部件组成

  工厂模式:不允许选配
  建造者模式:允许选配

  建造者模式根据建造过程中的顺序不一样,最终的对象部件组成也不一样

作业:

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

    汽车选配的时候,同个系列有低配、中配、高配的,选配的过程,选择不同的部件进行组装


原文地址:https://www.cnblogs.com/fightingtong/p/12883426.html