博客
关于我
【设计模式之禅】建造者模式
阅读量:495 次
发布时间:2019-03-07

本文共 1691 字,大约阅读时间需要 5 分钟。

建造者模式是一种软件设计模式,它允许一个复杂对象的构造过程与其表示相隔离,使得可以通过不同的构造方式创建相同或不同的表示。这种模式特别适用于需要创建不同配置或版本的对象,而这些对象的构造方式和顺序可能会影响最终产物本身。

定义

建造者模式(Builder Pattern)的核心思想是将对象的构建过程封装起来,通过专门的建造者类(Builder)来管理构造步骤。这样一来,不同的建造者可以提供不同的构造逻辑,而产品类本身只需要关注于自身的行为定义,而不必直接参与构造过程。

角色定义

在建造者模式下通常会有以下几个角色:

  • 产品类:这是构造过程最终目标的对象,通常会采用模板方法模式(Template Method Pattern)来定义构造过程中需要执行的基本操作。

  • 抽象建造者:这是一个抽象基类,定义了一个通用的构造流程。它需要知道该如何为产品类添加不同零件或配置。

  • 具体建造者:继承自抽象建造者,并实现了具体的构造步骤。每个具体建造者对应一种不同的构造方式或配置需求。

  • 导演类:这个角色通常由一个或多个类组成,负责协调建造过程,决定使用哪一个具体建造者以及在什么顺序执行其方法。

  • 代码示例

    // 产品类
    public class Product {
    public void doSomething() {
    // 假设这是产品类的一些默认逻辑
    }
    }
    // 抽象建造者
    public abstract class Builder {
    public abstract void setPart(); // 设置产品的不同部分
    public abstract Product buildProduct(); // 返回构造完成的产品
    }
    // 具体建造者
    public class ConcreteProduct extends Builder {
    private Product product = new Product(); // 初始化产品
    public void setPart() {
    product.doSomething(); // 假设这是具体的配置步骤
    }
    public Product buildProduct() {
    return product;
    }
    }
    // 导演类
    public class Director {
    private Builder builder;
    public Director(Builder builder) {
    this.builder = builder;
    }
    public Product getProduct() {
    builder.setPart();
    return builder.buildProduct();
    }
    }

    注意:这里的代码示例仅是部分框架,实际开发中可能会有更多的字段和方法需要实现,具体还要根据实际需求进行调整。

    优点

  • 封装性:通过封装建造过程,避免了高层模块直接操作底层细节。

  • 灵活性:同一个构造过程可以通过不同的建造者生成不同的产品配置。

  • 可扩展性:只需要添加新的具体建造者就能支持新的构造方式,而不需要修改现有的产品类。

  • 应用场景

  • 需要多种构造方式,但公共部分可以被封装:比如在某些框架或工具中,默认提供一种默认构造方式,但可以通过使用不同的建造者来定制构造行为。

  • 需要复杂的构造顺序:比如在某些系统中,某些步骤必须按照特定的顺序执行,以确保最终结果的正确性。

  • 需要支持动态配置:比如在某些日志记录库中,您可以选择通过配置文件或其他方式定义构造器,以便灵活配置日志输出格式。

  • 总结

    通过研究和理解建造者模式,我认为这是一种非常灵活且强大的手段。当需要灵活配置复杂对象的构造方式时,建造者模式可以帮助我们将构造过程与产品表示分离开来,使得两者之间的耦合度降低,从而提升系统的可维护性和扩展性。

    转载地址:http://txtcz.baihongyu.com/

    你可能感兴趣的文章
    No module named 'crispy_forms'等使用pycharm开发
    查看>>
    No module named cv2
    查看>>
    No module named tensorboard.main在安装tensorboardX的时候遇到的问题
    查看>>
    No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
    查看>>
    No new migrations found. Your system is up-to-date.
    查看>>
    No qualifying bean of type XXX found for dependency XXX.
    查看>>
    No qualifying bean of type ‘com.netflix.discovery.AbstractDiscoveryClientOptionalArgs<?>‘ available
    查看>>
    No resource identifier found for attribute 'srcCompat' in package的解决办法
    查看>>
    no session found for current thread
    查看>>
    No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
    查看>>
    NO.23 ZenTaoPHP目录结构
    查看>>
    no1
    查看>>
    NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分
    查看>>
    NOAA(美国海洋和大气管理局)气象数据获取与POI点数据获取
    查看>>
    NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
    查看>>
    node exporter完整版
    查看>>
    Node JS: < 一> 初识Node JS
    查看>>
    Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime(72)
    查看>>
    Node 裁切图片的方法
    查看>>
    Node+Express连接mysql实现增删改查
    查看>>