zoukankan      html  css  js  c++  java
  • 建造者模式

    建造者模式(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个需要用到建造者模式的业务场景。

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


  • 相关阅读:
    dubbo入门(一)
    java中文件操作《一》
    Unity 游戏框架搭建 2019 (七) 自定义快捷键
    凉鞋:我所理解的框架 【Unity 游戏框架搭建】
    Unity 游戏框架搭建 2019 (六) MenuItem 复用
    Unity 游戏框架搭建 2019 (五) 打开所在文件夹
    Unity 游戏框架搭建 2019 (四) 导出 UnityPackage
    Unity 游戏框架搭建 2019 (三) 生成文件名到剪切板
    Unity 游戏框架搭建 2019 (二) 文本复制到剪切板
    Unity 游戏框架搭建 2019 (一) 简介与第一个示例文件名的生成
  • 原文地址:https://www.cnblogs.com/fightingtong/p/12883426.html
Copyright © 2011-2022 走看看