4、建造者模式(创建型模式)

建造者模式适用场景

1、在接口中,所有的抽象的行为(方法),不需要全部实现
例如:电动车和汽油车。电动车的行为是充电。而汽油车的行为是加油
2、符合设计模式的单一职责和开闭原则
例如:新增卡车的时候,还需要修改原来的代码
3、不想创建很多的构造方法
例如:创造电动车和汽油车。会建2个构造方法,以后扩展的话,还会建很多的构造方法

建造者模式成员

1、Product (产品类):需要为其构建对象的类,是具有不同表现形式的复杂或者复合类。
2、Buider(构建者基类):抽象了所有车的行为(接口类)。
3、ConcreteBuilder(具体构建者类):实现了构建者基类的方法。(依赖产品类)
但是按着不同的场景去实现。
例如:电动车就不需要加油的方法,所以实现的时候直接返回
汽油车不需要充电的方法,所以实现的时候直接返回
4、Director(导演类):
实际的service层,入参为Buider(构建者基类),实际实现的时候,传的入参由场景而定。

案例

Q:电动车和汽油车的启动。
1、电动车:充电,启动
2、汽油车:加油,启动


/**
 * 汽车行为基类(建造者模式基类)
 *
 *
 * */
public interface CarBuilder {
    /**
     * 生产
     *
     * */
    public CarProduct production();

    /**
     * 启动
     *
     * */
    public void startUp();

    /**
     * 加油
     *
     * */
    public void addGasoline();
    /**
     * 充电
     *
     * */
    public void charge();

}

/**
 * 具体实现类,依赖产品类
 * 建造者模式基类的实现类,实现电动车。
 * 所有加汽油的行为,直接返回
 * 例如: addGasoline
 *
 * */
public class ElectricBuilder implements CarBuilder{

    @Autowired
    CarProduct carProduct;

    @Override
    public CarProduct production() {
        System.out.println("生产电动汽车");
        charge();
        startUp();
        carProduct.setPrice(100.00);
        return null;
    }


    @Override
    public void startUp() {
        System.out.println("用电启动");
    }


    /**
     * 该类是生产电动汽车的,加汽油的行为不能有,直接返回即可
     *
     * */
    @Override
    public void addGasoline() {
        return;
    }

    @Override
    public void charge() {
        System.out.println("充电中");
    }
}

/**
 * 具体实现类,依赖产品类
 * 建造者模式,加汽油构建。
 * 所有电动车的行为,直接返回。
 * 例如:charge
 *
 * */
public class GasolineBuilder implements CarBuilder{


    @Autowired
    CarProduct carProduct;

    @Override
    public CarProduct production() {
        System.out.println("生产汽油车");
        addGasoline();
        startUp();
        carProduct.setPrice(100.00);
        return null;
    }

    @Override
    public void startUp() {
        System.out.println("加油启动");
    }

    @Override
    public void addGasoline() {
        System.out.println("加汽油中");
    }

    /**
     * 由于是加汽油的,不能充电。所以直接返回
     *
     *
     * */
    @Override
    public void charge() {
        return;
    }
}

/**
 * 建造者模式中的产品类(Moudle类)
 * 汽车的综合属性
 *
 *
 * */
public class CarProduct {

    /**
     * 价格
     *
     * */
    private Double price;
    /**
     * 重量
     *
     * */
    private Double weight;
    /**
     * 轮胎
     *
     * */
    private List<Object> list;

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Double getWeight() {
        return weight;
    }

    public void setWeight(Double weight) {
        this.weight = weight;
    }

    public List<Object> getList() {
        return list;
    }

    public void setList(List<Object> list) {
        this.list = list;
    }
}

/**
 * 导演类:
 * 入参是接口类
 *
 * */
public class CarBuilderDirector {

    /**
     * 构建充电车的时候,入参CarBuilder 为
     * CarBuilder carBuilder=new ElectricBuilder();
     *
     *
     * */
    public void buildElectricCar(CarBuilder carBuilder){
        carBuilder.charge();
        carBuilder.startUp();
    }

    /**
     * 构建加油车的时候,入参CarBuilder 为
     * CarBuilder carBuilder=new GasolineBuilder();
     *
     * */
    public void buildGasolineBuilder(CarBuilder carBuilder){
        carBuilder.addGasoline();
        carBuilder.startUp();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值