zoukankan      html  css  js  c++  java
  • 六个创建模式之建造者模式(Builder Pattern)

    定义:
    将一个复杂的对象的构建与它的表示分类,使得同样的构建过程可以创建不同的表示。建造者模式一步步地创建一个复杂对象,但用户仅需指定对象的类型和内容,不需要关心各个部分之间的关联关系。

    结构图:

    • Builder:抽象建造者,为创建产品定义抽象接口。一般含有两类:buildPartX()方法,用于常见产品的各个部分;getResult()方法,用于返回创建结果。
    • ConcreteBuilder:具体建造者,实现了Builder接口,对一种具体复杂产品进行创建。
    • Product:产品类,含有多个组成部分,具体创建者创建该产品,并定义它的装配过程。
    • Director:指挥类,负责安排复杂对象各个部分之间的创建次序,与建造者之间存在关联关系,需要具体的建造者才能生效。客户端一般只需要和指挥类交互,隐藏了复杂产品的建造细节。

    注意:

    • 生产出来的商品依赖于建造者的build方法,build方法中一般会对product进行各种各样的改造,这样对于同一种产品可以有各个部分可以有不同的表示。
    • 指挥类主要有两个作用:一是隐藏产品的建造细节,而是控制产品的创建过程。
    • 建造模式和抽象工厂模式有一定的区别,抽象工厂模式会返回一系列相关的产品,而建造者模式只会返回一种产品,但其每部确实可以灵活多变的。
    • 在一些特殊情况下可以将指挥者和抽象建造者进行合并,在抽象建造者加入静态方法constractor(),然后传入一个具体builder而返回一个产品对象。
    • 可以通过Director类更精细地控制产品的创建过程,因此可以根据设置值的具体内容在Builder内部添加钩子方法。这些通常是boolean类型,方法名一般为isXXX()。在Director中,通过调用这些方法判断分支情况,改变产品类的创建过程。

    优点:

    • 客户不知道产品的具体组成细节,不同的创建过程可以构造出不同的产品,将产品本身和产品进行解耦。如果需要不同类型的产品,只需要新添构造类就可,不需要改造产品类。
    • 根据产品的不同属性,可以在Director中更加精细地控制产品创建过程。

    缺点:

    • 产品的整体结构内容不能变,只能是各个部分属性的调整。如果产品结构类型差别很大,则不能使用建造者模式。
    • 如果产品种类较多并且产品创建复杂,则需要很多具体建造者来实现,导致系统不可维护。

    适用场景:

    • 产品内部是由各个部分组合而成,包含多个成员属性。且这些成员相互依赖,需要制定生成顺序。

    实例:

    BuilderPattern.java

  • 相关阅读:
    向Oracle 数据表中插入一条带有日期类型的数据
    JDBC 连接Oracle 数据库,JDBC 连接Mysql 数据库
    球球大作战四亿人都在玩?玩家回归没有优越感,新玩家游戏被虐,游戏体验感极差!
    struts2中的错误--java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
    如何在idea中设置 jsp 内容修改以后,立即生效而不用重新启动服务?
    idea中 在接口中如何直接跳转到该接口的是实现类中?
    使用IDEA 创建Servlet 的时候,找不到javax.servlet
    如何高效的遍历HashMap 以及对key 进行排序
    springboot 自动装配
    git 多账户添加ssh秘钥
  • 原文地址:https://www.cnblogs.com/zhangfei614/p/6002095.html
Copyright © 2011-2022 走看看