设计模式--建造者模式

简介

建造者模式是一种创建型设计模式,它把对象的创建步骤抽象成生成器,并且可以通过指导类(director)对所有生成步骤的先后顺序进行控制。客户端使用指导类并传入相应的生成器,通过指导类的接口便可以得到相应的对象。
在这里插入图片描述
主要四大角色:
Product:表示被构造的复杂对象,其中包含需要构建的部件属性。
Builder:创建一个产品对象的各个部件指定抽象接口。
ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示。
Director:调用具体建造者角色以创建产品对象。

生成器模式与抽象工厂模式的区别

生成器模式:
构建复杂对象
以多个步骤构建对象
以多种方式构建对象
在构建过程的最后一步返回产品
专注一个特定产品

工厂模式:
构建简单或复杂对象
以单一步骤构建对象 以单一方式构建对象
立刻返回产品
强调一套产品

示例

以生产汽车为例,骑车包含发动机、轮胎、座椅等等部件。
角色1Product
Car.java

public class Car {
    private String wheel;
    private String engine;
    private String seats;

    public String getWheel() {
        return wheel;
    }
    public void setWheel(String wheel) {
        this.wheel = wheel;
    }
    public String getEngine() {
        return engine;
    }
    public void setEngine(String engine) {
        this.engine = engine;
    }
    public String getSeats() {
        return seats;
    }
    public void setSeats(String seats) {
        this.seats = seats;
    }
}

角色2Builder
CarBuilder.java

public interface CarBuilder {
    String buildWheel();
    String buildEngine();
    String buildSeats();
}

角色3ConcreteBuilder
CarConcreteBuilder.java

public class CarConcreteBuilder implements CarBuilder {
    @Override
    public String buildWheel() {
        return "wheel";
    }

    @Override
    public String buildEngine() {
        return "engine";
    }

    @Override
    public String buildSeats() {
        return "seats";
    }
}

角色4Director
CarDirector.java

public class CarDirector {
    CarBuilder carBuilder;

    public CarDirector(CarBuilder carBuilder) {
        this.carBuilder = carBuilder;
    }
    public Car createCar(){
        Car car = new Car();
        car.setEngine(carBuilder.buildEngine());
        car.setSeats(carBuilder.buildSeats());
        car.setWheel(carBuilder.buildWheel());
        return car;
    }
}

验证:

public class Main {
    public static void main(String[] args) {
        CarDirector carDirector = new CarDirector(new CarConcreteBuilder());
        Car car = carDirector.createCar();
        System.out.println(car.getEngine());
        System.out.println(car.getSeats());
        System.out.println(car.getWheel());
    }
}

engine
seats
wheel

建造者模式的优点

首先,建造者模式的封装性很好。
使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在导演类中对整体而言可以取得比较好的稳定性。
其次,建造者模式很容易进行扩展。
如果有新的需求,通过实现一个新的建造者类就可以完成,基本上不用修改之前已经测试通过的代码,因此也就不会对原有功能引入风险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值