博客
关于我
【设计模式之禅】建造者模式
阅读量: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 中锁的面试题总结
    查看>>
    MySQL 中随机抽样:order by rand limit 的替代方案
    查看>>
    MySQL 为什么需要两阶段提交?
    查看>>
    mysql 为某个字段的值加前缀、去掉前缀
    查看>>
    mysql 主从
    查看>>
    mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
    查看>>
    mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
    查看>>
    mysql 主从关系切换
    查看>>
    mysql 主键重复则覆盖_数据库主键不能重复
    查看>>
    Mysql 优化 or
    查看>>
    mysql 优化器 key_mysql – 选择*和查询优化器
    查看>>
    MySQL 优化:Explain 执行计划详解
    查看>>
    Mysql 会导致锁表的语法
    查看>>
    mysql 使用sql文件恢复数据库
    查看>>
    mysql 修改默认字符集为utf8
    查看>>
    Mysql 共享锁
    查看>>
    MySQL 内核深度优化
    查看>>
    mysql 内连接、自然连接、外连接的区别
    查看>>
    mysql 写入慢优化
    查看>>