二十三种设计模式之建造者模式(类比汽车制造厂好理解一些)

目录

[1. 设计模式的分类](#1. 设计模式的分类)

[2. 定义](#2. 定义)

[3. 建造者模式通常包含以下几个角色](#3. 建造者模式通常包含以下几个角色)

[4. 示例代码](#4. 示例代码)

[5. 建造者模式的主要优点](#5. 建造者模式的主要优点)


1. 设计模式的分类

创建型模式(五种):工厂方法模式、单例模式、抽象工厂模式、原型模式、建造者模式

结构型模式(七种):适配器模式、代理模式、装饰器模式、桥接模式、外观模式、享元模式、组合模式。

行为型模式(十一种):状态模式、模板方法模式、访问者模式、迭代子模式、责任链模式、备忘录模式、解释器模式、命令模式、中介者模式、观察者模式、策略模式。

2. 定义

建造者模式(Builder Pattern)是一种用来构建复杂对象的设计模式,它能够让你分步骤创建复杂对象,并允许你只通过必要的步骤来构建对象。建造者模式是创建型模式之一,它提供了一种创建对象的最佳方式。

为了大家更好理解,这里类比汽车制造厂,车辆的组装过程可以看作是建造者模式的应用。汽车的底盘、引擎、内饰等部件(组件)被逐步组装起来,形成一辆完整的汽车(产品)。不同的车型可能需要不同的组装步骤,但组装线(建造过程)保持一致。

像这样的类比还有:乐高积木、电脑组装等等。

3. 建造者模式通常包含以下几个角色

  • 产品(Product):需要构建的复杂对象。
  • 抽象建造者(Builder):创建一个Product对象的接口或抽象类,定义创建复杂对象的各个步骤。
  • 具体建造者(ConcreteBuilder):实现Builder接口,针对不同的商业逻辑创建产品对象。
  • 指挥者(Director):负责安排已有模块的顺序,然后告诉Builder开始建造。
  • 客户端(Client):客户端代码一般会使用Director来构建一个复杂的对象,并提供一个或多个Builder来创建特定类型的产品。

4. 示例代码

4.1 产品类

java 复制代码
public class Product {
    private String partA;
    private String partB;

    public String getPartA() {
        return partA;
    }

    public void setPartA(String partA) {
        this.partA = partA;
    }

    public String getPartB() {
        return partB;
    }

    public void setPartB(String partB) {
        this.partB = partB;
    }

    @Override
    public String toString() {
        return "Product{" +
                "partA='" + partA + '\'' +
                ", partB='" + partB + '\'' +
                '}';
    }
}

4.2 抽象建造者

java 复制代码
public interface Builder {
    void buildPartA();
    void buildPartB();
    Product getResult();
}

4.3 具体建造者

java 复制代码
public class ConcreteBuilder implements Builder{

    private Product product;


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

    @Override
    public void buildPartA() {
        product.setPartA("PartA");
    }

    @Override
    public void buildPartB() {
        product.setPartB("PartB");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

4.4 指挥者

java 复制代码
public class Director {
    private Builder builder;

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

    public void construct() {
        builder.buildPartA();
        builder.buildPartB();
    }

    public Product getProduct() {
        return builder.getResult();
    }
}

4.5 客户端代码

java 复制代码
public class Main {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        director.construct();
        Product product = director.getProduct();
        System.out.println(product);
    }
}

4.6 运行结果

5. 建造者模式的主要优点

  1. 分离对象的构建和表示:建造者模式可以将对象的构建过程和表示分离,使得相同的构建过程可以创建不同的表示。
  2. 相同的构建过程可以创建不同的产品:通过不同的建造者,可以使用相同的构建过程创建不同的产品。
  3. 更复杂的对象构建:可以逐步构建复杂对象,每一步都允许你只添加你所需要的部分。
相关推荐
会员果汁23 分钟前
17.设计模式-单例模式(Singleton)
单例模式·设计模式
派大鑫wink42 分钟前
【Day37】MVC 设计模式:原理与手动实现简易 MVC 框架
java·设计模式·mvc
会员果汁1 小时前
18.设计模式-桥接模式
设计模式·桥接模式
老蒋每日coding1 小时前
AI Agent 设计模式系列(九)——学习和适应模式
人工智能·学习·设计模式
da_vinci_x15 小时前
武器设计实战:一把大剑裂变 5 种属性?Structure Ref 的“换肤”魔法
游戏·3d·设计模式·ai作画·aigc·设计师·游戏美术
刀法孜然19 小时前
23种设计模式 3 行为型模式 之3.7 command 命令模式
设计模式·命令模式
一条闲鱼_mytube20 小时前
智能体设计模式(二)反思-工具使用-规划
网络·人工智能·设计模式
老蒋每日coding1 天前
AI智能体设计模式系列(七)—— 多 Agent 协作模式
设计模式
小码过河.1 天前
设计模式——代理模式
设计模式·代理模式
Engineer邓祥浩1 天前
设计模式学习(14) 23-12 代理模式
学习·设计模式·代理模式