大话设计模式——3.建造者模式(Builder Pattern)

本文介绍了构造者模式在汽车组装中的应用,通过抽象层、指挥者和具体建造者,隐藏了复杂对象的创建细节,实现产品与创建过程解耦,但可能增加系统复杂性和维护难度。
摘要由CSDN通过智能技术生成
1.定义:
  • 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  • 属于创建型模式
  • UML图
    在这里插入图片描述
2.示例:

汽车或者电脑的组装可以采用构造者模式进行设计,如汽车的引擎或者轮胎,电脑的处理器、内存、主板等都可以进行单独的设计和组装。下面已汽车组装为例:

  • 首先是汽车对象:
public class Car {

    /**
     * 引擎
     */
    private String engine;


    /**
     * 轮胎
     */
    private String tire;

    /**
     * 外壳
     */
    private String shell;

    /**
     * 品牌
     */
    private String brand;

    public String getEngine() {
        return engine;
    }

    public void setEngine(String engine) {
        this.engine = engine;
    }

    public String getTire() {
        return tire;
    }

    public void setTire(String tire) {
        this.tire = tire;
    }

    public String getShell() {
        return shell;
    }

    public void setShell(String shell) {
        this.shell = shell;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    @Override
    public String toString() {
        return "Car{" +
                "engine='" + engine + '\'' +
                ", tire='" + tire + '\'' +
                ", shell='" + shell + '\'' +
                ", brand='" + brand + '\'' +
                '}';
    }
}
  • 车辆构建抽象层 也就是builder,规范车辆的构造
public interface VehicleBuilder {

    /**
     * 引擎
     */
    void engine();

    /**
     * 轮胎
     */
    void tire();

    /**
     * 外壳
     */
    void shell();

    /**
     * 品牌
     */
    void brand();

    /**
     * 创建汽车
     *
     * @return
     */
    Car createCar();

}
  • 车辆构建指挥者 director,主要负责最终的组装
public class VehicleDirector {

    public Car createVehicle(VehicleBuilder vehicleBuilder) {

        vehicleBuilder.engine();
        vehicleBuilder.tire();
        vehicleBuilder.brand();
        vehicleBuilder.shell();

        return vehicleBuilder.createCar();
    }
}
  • 具体的车辆构造器,采用什么材料或者部件构造一辆车,实现或者继承抽象构造层可以关联具体的产品
public class BMWVehicleBuilder implements VehicleBuilder {

    private Car car = new Car();


    @Override
    public void engine() {
        car.setEngine("V8引擎");
    }

    @Override
    public void tire() {
        car.setTire("米其林轮胎");
    }

    @Override
    public void shell() {
        car.setShell("钛合金外壳");
    }

    @Override
    public void brand() {
        car.setBrand("宝马X5");
    }

    @Override
    public Car createCar() {
        return this.car;
    }
}
  • 测试
public class Main {

    public static void main(String[] args) {
        VehicleDirector vehicleDirector = new VehicleDirector();
        VehicleBuilder bmwVehicleBuilder = new BMWVehicleBuilder();
        Car vehicle = vehicleDirector.createVehicle(bmwVehicleBuilder);
        System.out.println(vehicle);
    }
}

在这里插入图片描述

总结
  • 优点:
    • 隐藏具体的建造细节,将产品本身与产品的创建过程解耦
    • 具体建造者之间相对独立,可以更加精细地控制产品的创建过程
    • 新增具体建造者无须修改原有类库的代码,符合开闭原则
  • 缺点:
    • 创建的产品的需要有较多的共同点,否则使用效果不理想
    • 也会增加系统代码的复杂度,使其更为抽象,维护难度增大
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值