关注微信公众号:程序驴,获取更多学习资料
何为建造者模式
建造者模式一般用于构建一个由多个简单对象构成的复杂对象。比如一台完整的汽车对象,其中可能需要:
- 车体框架对象
- 车门对象
- 车窗对象
- 发动机对象
- ……
其实不同的汽车品牌,他用到的某个部件可能是来自不同的厂家,但是汽车的构造过程是大差不差的,也就是同样的构造模式可以创建不同的对象。如果构造汽车这一过程完全由人操控,在程序中体现就是你需要写很多的set方法(例如下面这样)
Car mycar = new Car();
mycar.setBody("钛合金进口车架");
mycar.setDoor("防弹车门");
mycar.setEngine("双瓦轮增压发动机")
// ............
最终才能得到一种汽车,而建造者模式简化了这一过程,建造者模式对某一种特定的复杂对象提供了专门构造他的Builder方法,该Builder方法类似于将所有set方法进行了单独的封装,使得Builder方法最终可以直接提供出我们需要的那一种汽车,比如下面:
public Class mycarBuilder extends carBuilder{
public void buildBody(){
mycar.setBody("钛合金进口车架");
}
public void buildDoor(){
mycar.setDoor("防弹车门");
}
public void buildEngine(){
mycar.setEngine("双瓦轮增压发动机")
}
public Car getCar(){
return mycar;
}
}
实战案例
汽车对我们有点遥远,我们拿平时吃快餐这件事做例子:快餐店通常会提供多种多样的套餐,一份套餐通常会包含主食、小吃、饮品,算是一个复杂对象,不同的食物搭配组成不同的套餐。
套餐类
偷懒直接用String了,实际还应该设计主食类,小吃类,饮品类等。
套餐构建抽象类
A套餐Builder
B套餐Builder
两种建造者会直接返回对应的套餐类型
套餐指挥类
通过传入的建造者类型,获得对应对象。
BuilderMain
运行结果
所有设计模式源码已上传至gitee,地址:https://gitee.com/linfeng-show/design_pattern_-master