建造者模式(Builder Pattern)

建造者模式

说明

建造者模式(Builder Pattern)属于创建型模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
在某些业务场景中,一个复杂对象的构建可能需要很多的步骤,而这些步骤存在普遍性,如果每次创建该对象都需要操作这些步骤,难免会出现某个步骤遗漏等情况,使用建造者模式可以将这些普遍的步骤抽象出来,让具体的建造者按照规定好的步骤构建对象,使整个构建过程更加规范化。
比如电脑是由主板、CPU、内存、显卡、硬盘等等组成,组装电脑的顺序基本是不变的。

结构

建造者模式的主要角色如下:
产品角色(Product):一个复杂的对象,由多个部件组成,构建该对象时需要多个步骤才能完成,由具体的建造者完成构建。
抽象建造者(Builder):定义了创建复杂产品各个部件的抽象方法,并且还有一个返回最终构建好的复杂对象的方法。
具体的建造者(Concrete Builder):实现抽象建造者的抽象方法,根据具体的需求完成对复杂对象的具体构建。
指挥者(Director):指挥具体的建造者按照规定好的步骤构建对象,并返回该对象。
在这里插入图片描述

代码案例

/**
 * @program: builder
 * @description: 汽车类
 * @author: wxw
 * @create: 2024-03-06 18:14
 **/
@Data
public class Car {

    // 汽车类型
    private String type;

    // 汽车级别
    private String level;

    // 发动机
    private String engine;

    // 电池
    private String battery;

    // 展示信息
    public void showInfo(){
        System.out.println(String.format("汽车类型:%s 汽车级别:%s 发动机:%s 电池:%s", 
                this.type,this.level,this.engine,this.battery));
    }
}

/**
 * @program: builder
 * @description: 抽象的汽车建造者
 * @author: wxw
 * @create: 2024-03-06 18:20
 **/
public abstract class CarBuilder {

    // 包含具体的产品实例
    protected Car car = new Car();

    // 构建汽车类型
    public abstract void buildType();

    // 构建汽车级别
    public abstract void buildLevel();

    // 构建发动机
    public abstract void buildEngine();

    // 构建电池
    public abstract void buildBattery();

    /**
     * 返回产品实例
     * @return
     */
    public Car getCar(){
        return this.car;
    }
}

/**
 * @program: builder
 * @description: 电动车建造者
 * @author: wxw
 * @create: 2024-03-06 18:22
 **/
public class ElectrocarBuilder extends CarBuilder {

    @Override
    public void buildType() {
        car.setType("SUV");
    }

    @Override
    public void buildLevel() {
        car.setLevel("中大型车");
    }

    @Override
    public void buildEngine() {
        car.setEngine("电动车,无需安装发动机");
    }

    @Override
    public void buildBattery() {
        car.setBattery("磷酸铁锂电池");
    }
}

/**
 * @program: builder
 * @description: 燃油车建造者
 * @author: wxw
 * @create: 2024-03-06 18:22
 **/
public class FuelVehicleBuilder extends CarBuilder {

    @Override
    public void buildType() {
        car.setType("轿车");
    }

    @Override
    public void buildLevel() {
        car.setLevel("中型车");
    }

    @Override
    public void buildEngine() {
        car.setEngine("2.0T发动机");
    }

    @Override
    public void buildBattery() {
        car.setBattery("燃油车,无需安装电池");
    }
}

/**
 * @program: builder
 * @description: 指挥者
 * @author: wxw
 * @create: 2024-03-06 18:31
 **/
public class Director {

    private CarBuilder carBuilder;

    public Director(CarBuilder carBuilder) {
        this.carBuilder = carBuilder;
    }

    // 按照规定的步骤组装汽车
    public Car construct(){
        carBuilder.buildType();
        carBuilder.buildLevel();
        carBuilder.buildEngine();
        carBuilder.buildBattery();
        return carBuilder.getCar();
    }
}

/**
 * @program: builder
 * @description: 客户端类
 * @author: wxw
 * @create: 2024-03-06 18:33
 **/
public class Client {
    public static void main(String[] args) {
        // 燃油车建造者
        CarBuilder fuelVehicleBuilder = new FuelVehicleBuilder();
        Director director = new Director(fuelVehicleBuilder);
        Car car = director.construct();
        car.showInfo();

        // 电动车
        CarBuilder electrocarBuilder = new ElectrocarBuilder();
        director = new Director(electrocarBuilder);
        car = director.construct();
        car.showInfo();
    }
}

输出:

汽车类型:轿车 汽车级别:中型车 发动机:2.0T发动机 电池:燃油车,无需安装电池
汽车类型:SUV 汽车级别:中大型车 发动机:电动车,无需安装发动机 电池:磷酸铁锂电池
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值