设计模式之建造者详细解读

设计模式之建造者

**概念:**建造者模式是一种创建型设计模式,也叫生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
**解释:**就是将复杂对象的创建过程拆分成多个简单对象的创建过程,并将这些简单对象组合起来构建出复杂对象。

在一个建造者模式中,通常需要一下角色:
Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法,一类方法是buildPartX(),它们用于创建复杂对象的各个部件;另一类方法是getResult(),它们用于返回复杂对象。Builder既可以是抽象类,也可以是接口。
ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体构造和装配方法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。
Product(产品角色):它是被构建的复杂对象,包含多个组成部件。
Director(指挥者):它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其construct()方法中调用建造者对象的部件构造与装配方法,完成复杂对象的建造。

样例:
我们以建造一辆小米su7汽车来举例,众所周知,一辆汽车建造起来是很复杂的,肯定要有电池,要有车身,要有人工智能等等等等,假如我现在需要一辆搭载了小爱同学且车身颜色是蓝色的小米su7,然后需要一辆搭载了小艺同学且车身颜色为红色的华为m7汽车

Product(产品角色)

public class Car {

    private String carBattery;

    private String carBody;

    private String carAi;

    private String carPrice;

    public void setCarBattery(String carBattery) {
        this.carBattery = carBattery;
    }

    public void setCarBody(String carBody) {
        this.carBody = carBody;
    }

    public void setCarAi(String carAi) {
        this.carAi = carAi;
    }

    public void setCarPrice(String carPrice) {
        this.carPrice = carPrice;
    }

    @Override
    public String toString() {
        return "Car{" +
                "carBattery='" + carBattery + '\'' +
                ", carBody='" + carBody + '\'' +
                ", carAi='" + carAi + '\'' +
                ", carPrice='" + carPrice + '\'' +
                '}';
    }

}

抽象建造者(Builder)

abstract class Builder {

    Car car = new Car();
    public Car builder() {
        return car;
    }

    //建造汽车电池
    abstract void builderCarBattery();
    //建造汽车车身
    abstract void builderCarBody();
    //建造汽车人工智能
    abstract void builderCarAi();
    //建造汽车颜色
    abstract void builderColor();
    
}

具体构建者(ConcreteBuilder) 以小米su7的建造为例

public class XiaoMiSu7 extends Builder{

    @Override
    void builderCarBattery() {
        car.setCarBattery("比亚迪");
    }

    @Override
    void builderCarBody() {
        car.setCarBody("保时捷同款");
    }

    @Override
    void builderCarAi() {
        car.setCarAi("小爱同学");
    }

    @Override
    void builderColor() {
        car.setColor("蓝");
    }
}

具体构建者(ConcreteBuilder) 以华为m7的建造为例

public class HuaWeiM9 extends Builder{

    @Override
    void builderCarBattery() {
        car.setCarBattery("宁德时代");
    }

    @Override
    void builderCarBody() {
        car.setCarBody("一体化");
    }

    @Override
    void builderCarAi() {
        car.setCarAi("小艺");
    }

    @Override
    void builderColor() {
        car.setColor("红");
    }
}

Director(指挥者)

/**
 * @author admin
 */
public class Director {

    Builder  builder;

    public void setBuilder(Builder builder) {
        this.builder = builder;
    }

    Car createCar1(){
       builder.builderCarBattery();
       builder.builderCarAi();
       return builder.builder();
    }

    Car createCar2(){
        builder.builderCarBattery();
        builder.builderColor();
        return builder.builder();
    }
}

测试类

public class Main {
    public static void main(String[] args) {
        //指挥者
        Director director = new Director();
        //小米su7实例
        XiaoMiSu7  xiaomi = new XiaoMiSu7();
        HuaWeiM9 huawei = new HuaWeiM9();
        director.setBuilder(xiaomi);
        System.out.println(director.createCar1().toString());
        director.setBuilder(huawei);
        System.out.println(director.createCar1().toString());
    }
}

通过观察可以发现,根据不同的需求,建造者模式可以构造出不同的车对象。每个车的构建过程都由不同的建造者实现,在构建过程中可定制相应的属性。最终,因为车的构建过程和表示分离,所以同样的构建过程可以创建出不同的表示。
在这里插入图片描述
与抽象工厂模式的区别:

    抽象工厂模式强调的是产品族的创建,即相关的产品一起被创建出来,而建造者模式强调的是一个复杂对象的创建,即它的各个部分逐步被创建出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

''如果

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值