建造者模式简介

概念

建造者模式(Builder Pattern)是一种创建型设计模式,用于将复杂对象的构建过程与其表示分离。它允许您逐步构造一个复杂对象,同时保持灵活性和可读性。

特点

  1. 将对象的构建过程封装在指导者类中,使得客户端不必知道具体的构建细节。
  2. 允许通过改变指导者或具体建造者之一来改变最终生成的产品。
  3. 可以控制生成过程并根据需要进行定制化配置。

优点

  1. 提供了更好的控制和灵活性,可以根据需求定制化地创建复杂对象。
  2. 将构建代码与表示代码分离,使得相同的构建过程可以创建不同表示形式的对象。
  3. 代码可读性高,易于理解和维护。

缺点

  1. 增加了系统中类的数量,在某些情况下可能会增加开发成本。
  2. 如果产品结构非常简单,则使用该模式可能会显得繁琐。

适用场景

  1. 当需要创建具有复杂内部结构且各个部分之间存在依赖关系的对象时,可以使用该模式。
  2. 当希望通过多个步骤动态地自定义一个对象时,可以使用该模式。

实现方式

在指导者类中控制构建过程,导者类负责控制整个构建过程。它接收一个具体的建造者对象,并使用该建造者对象来逐步构建复杂对象。

实现原理

  1. 指导者类持有一个具体的建造者对象。
  2. 在指导者类中定义一系列方法,用于按照特定顺序调用具体建造者对象的方法来构建复杂对象。
  3. 客户端通过创建指导者对象并将具体的建造者传入,然后调用指导者的构建方法来启动整个构建过程。

实现代码 :

java 复制代码
// 产品类
class Product {
    private String part1;
    private String part2;

    public void setPart1(String part1) {
        this.part1 = part1;
    }

    public String getPart1(){
        return this.part1;
    }

    public void setPart2(String part2) {
        this.part2 = part2;
    }

    public String getPart2(){
        return this.part2;
    }
}

// 抽象Builder接口
interface Builder {
    void buildPart1();

    void buildPart2();

    Product getResult();
}

// 具体Builder实现
class ConcreteBuilder implements Builder{
    private Product product;

    public ConcreteBuilder() {
        product = new Product();
    }

    public void buildPart1() {
        product.setPart1("part 1");
    }

    public void buildPart2() {
        product.setPart2("part 2");
    }

    public Product getResult(){
        return product;
    }
}

// 指导者类
class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public Product construct() {
        builder.buildPart1();
        builder.buildPart2();
        return builder.getResult();
    }

}
// 使用示例
public class Main {
    public static void main(String[] args) {
        ConcreteBuilder concreteBuilder = new ConcreteBuilder();
        Director director = new Director(concreteBuilder);
        Product product = director.construct();

        System.out.println(product.getPart1());
        System.out.println(product.getPart2());
    }
}

在上述示例中,我们定义了产品类Product作为最终构建的复杂对象。接着,我们定义了抽象的建造者接口Builder,其中包含了构建各个部分的方法和获取最终产品的方法。

具体实现类ConcreteBuilder实现了抽象建造者接口,并提供具体的构建逻辑。指导者类Director持有一个具体的建造者对象,在其构造函数中传入,并通过调用它来控制整个构件过程。

在客户端代码中,我们创建一个具体生成器对象并将其传递给指导者对象。然后调用指导者对象的construct方法启动整个构件过程,并返回最终生成的产品。

存在的问题:

每次增加新类型或结构变化时都需要修改指导着和具体生成器两个角色,这可能会导致代码的脆弱性。

相关推荐
尘浮生27 分钟前
Java项目实战II基于SpringBoot的共享单车管理系统开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·微信小程序·小程序
2401_8574396932 分钟前
社团管理新工具:SpringBoot框架
java·spring boot·后端
ThetaarSofVenice44 分钟前
Java从入门到放弃 之 泛型
java·开发语言
嘟嘟Listing1 小时前
jenkins docker记录
java·运维·jenkins
WHabcwu1 小时前
统⼀异常处理
java·开发语言
zaim11 小时前
计算机的错误计算(一百六十三)
java·c++·python·matlab·错数·等价算式
枫叶丹41 小时前
【在Linux世界中追寻伟大的One Piece】多线程(一)
java·linux·运维
2401_854391081 小时前
Spring Boot OA:企业数字化转型的利器
java·spring boot·后端
山山而川粤1 小时前
废品买卖回收管理系统|Java|SSM|Vue| 前后端分离
java·开发语言·后端·学习·mysql
栗豆包1 小时前
w053基于web的宠物咖啡馆平台的设计与实现
java·struts·spring·tomcat·maven·intellij-idea