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

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


  • 相关阅读:
    搭建高可用K8S集群
    K8S部署apollo配置中心
    微服务二:微服务的拆分、设计模式、内部结构
    微服务一:微服务概念入门及发展历程
    k8s可视化管理dashboard
    Windows节点加入K8S集群(K8S搭建Linux和Window混合集群)
    K8S搭建单点集群+问题处理
    K8S核心概念
    毕业论文word排版设置
    Anaconda3+PyTorch安装教程
  • 原文地址:https://www.cnblogs.com/fightingtong/p/12883426.html
Copyright © 2011-2022 走看看