建造者模式
该设计模式解决的问题是在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。
该模式有两种实现方向:
- 有一个制造者有自己的一套制造方案来制造该对象
- 自己指定制造计划
制造者制造
场景:造汽车
汽车类
1 |
|
组件接口
1 | public interface Component { |
车身
1 | public interface CarBody extends Component { |
引擎
1 | public interface Engine extends Component { |
车窗
1 | public interface Window extends Component { |
好的车身
1 | public class GoodCarBody implements CarBody{ |
不好的车身
1 | public class BadCarBody implements CarBody{ |
好的引擎
1 | public class GoodEngine implements Engine{ |
不好的引擎
1 | public class BadEngine implements Engine{ |
好的车窗
1 | public class GoodWindow implements Window{ |
不好的车窗
1 | public class BadWindow implements Window{ |
车的建造者
1 | public interface CarBuilder { |
具体的建造者
1 | public class DaZhongCarBulder implements CarBuilder { |
指导者
1 | public class Director { |
自定义建造
我们发现,有车由四部分组成,这四部分可以是同一个工厂造出来的,所以我们可以结合一个抽象工厂模式,将产品制造交给工厂。
组件工厂接口
1 | public interface ComponentFactory { |
不好的组件工厂
1 | public class BadFactory implements ComponentFactory{ |
好的组件工厂
1 | public class GoodFactory implements ComponentFactory{ |
改造CarBuilder
1 | public interface CarBuilder { |
具体制造商
1 | public class DaZhongCarBulder implements CarBuilder { |
客户端自定义制造
1 | public class Customer { |
加深理解
再来个案例:kfc点餐
首先食物接口
1 | public interface Food { |
饮料接口
1 | public interface Drink extends Food{ |
薯条接口
1 | public interface Chip extends Food{ |
炸鸡接口
1 | public interface Chicken extends Food{ |
奥尔良炸鸡
1 | public class OrleansFriedChicken implements Chicken{ |
孜然炸鸡
1 | public class CuminFriedChicken implements Chicken{ |
可乐
1 | public class Cola implements Drink{ |
大薯条
1 | public class BigChip implements Chip{ |
百事可乐
1 | public class BaiShi implements Drink { |
订单
1 |
|
点单小程序
1 | public class OrderApplication implements Builder{ |
客户端
1 | public static void main(String[] args) { |