简谈设计模式之建造者模式

建造者模式是一种创建型设计模式, 旨在将复杂对象的构建过程与其表示分离, 使同样的构建过程可以构建不同的表示. 建造者模式主要用于以下情况:

  1. 需要创建的对象非常复杂: 这个对象由多个部分组成, 且这些部分需要一步步地构建
  2. 不同的表示: 通过相同的构建过程可以生成不同的表示
  3. 构建过程的控制: 希望能够有更多的控制, 逐步创建对象, 而不是在一个步骤中完成

建造者模式结构

  1. 抽象建造者: 定义了创建产品的各部件的抽象接口
  2. 具体建造者: 实现了建造者接口, 构建并装配各个部件, 最终生成具体的产品
  3. 产品: 具体要创建的复杂对象
  4. 指挥者: 负责安排已有模块的顺序构建一个复杂的对象

建造者模式实现

java 复制代码
// 产品类
public class Product {
    private String partA;
    private String partB;
    private String partC;
    
    public void setPartA(String partA) {
        this.partA = partA;
    }
    
    public void setPartB(String partB) {
        this.partB = partB;
    }
    
    public void setPartC(String partC) {
        this.partC = partC;
    }
    
    @Override
    public String toString() {
        return "Product [partA=" + partA + ", partB=" + partB + ",partC=" + partC + "]";
    }
}

// 抽象建造者
public abstract class Builder {
    protected Product product = new Product();
    
    public abstract void buildPartA();
    public abstract void buildPartB();
    public abstract void buildPartC();
    
    public Product getResult() {
        return product;
    }
}

// 具体建造者
public class ConcreteBuilder extends Builder {
    @Override
    public void buildPartA() {
        product.setPartA("Part A");
    }
    
    @Override
    public void buildPartB() {
        product.setPartA("Part B");
    }
    
    @Override
    public void buildPartC() {
        product.setPartA("Part C");
    }
}

// 指挥者
public class Director {
    private Builder builder;
    
    public Director(Builder builder) {
        this.builder = builder
    }
    
    public void construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
    }
}

优点:

  • 易于拓展: 通过创建新的具体建造者, 可以很容易地增加新的产品表示
  • 细粒度控制: 可以一步步地构建对象, 细化对象的创建流程
  • 封装性: 将复杂对象的创建封装在建造者中, 客户端无需了解细节

缺点:

  • 更多的代码量: 为了实现建造者模式, 需要更多的类和接口, 增加了代码量
  • 复杂性: 对于简单的对象创建, 建造者模式过于复杂了
相关推荐
Mr_Xuhhh1 分钟前
LeetCode 热题 100 刷题笔记:从数组到字符串的经典解法(续)
java·数据结构·算法
皙然3 分钟前
AQS模型详解:Java并发的核心同步框架(从原理到实战)
java·开发语言·jvm
愤豆6 分钟前
08-Java语言核心-JVM原理-垃圾收集详解
java·开发语言·jvm
逸Y 仙X6 分钟前
文章十四:ElasticSearch Reindex重建索引
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
wregjru7 分钟前
【读书笔记】Effective C++ 条款8:别让异常逃离析构函数
java·开发语言
harder3217 分钟前
Swift 面向协议编程的 RMP 模式
开发语言·ios·mvc·swift·策略模式
烤麻辣烫8 分钟前
I/O流 进阶流
java·开发语言·学习·intellij-idea
艾莉丝努力练剑8 分钟前
【QT】QT快捷键整理
linux·运维·服务器·开发语言·图像处理·人工智能·qt
程序员_大白9 分钟前
【2025版】最新Qt下载安装及配置教程(非常详细)零基础入门到精通,收藏这篇就够了
开发语言·qt
枫叶丹49 分钟前
【HarmonyOS 6.0】ArkData 分布式数据对象新特性:资产传输进度监听与接续传输能力深度解析
开发语言·分布式·华为·wpf·harmonyos