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

本文共 1660 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    MySQL索引原理以及查询优化
    查看>>
    Mysql索引合并(index merge)导致的死锁问题
    查看>>
    mysql索引底层数据结构和算法
    查看>>
    Mysql索引底层结构的分析
    查看>>
    MySQL索引底层:B+树详解
    查看>>
    Mysql索引总结
    查看>>
    mysql索引最左匹配原则理解以及常见的sql使用的索引情况的实测
    查看>>
    Mysql索引类型
    查看>>
    MySQL索引背后的数据结构及算法原理
    查看>>
    mysql索引能重复吗_mysql “索引”能重复吗?“唯一索引”与“索引”区别是什么?...
    查看>>
    mysql级联删除_Mysql笔记系列,DQL基础复习,Mysql的约束与范式
    查看>>
    mysql经常使用命令
    查看>>
    MySQL经常使用技巧
    查看>>
    mysql给账号授权相关功能 | 表、视图等
    查看>>
    MySQL缓存使用率超过80%的解决方法
    查看>>
    Mysql缓存调优的基本知识(附Demo)
    查看>>
    mysql网站打开慢问题排查&数据库优化
    查看>>
    mysql网络部分代码
    查看>>
    mysql联合索引的最左前缀匹配原则
    查看>>
    mysql自动化同步校验_Shell: 分享MySQL数据同步+主从复制自动化脚本_20190313_七侠镇莫尛貝...
    查看>>