建造模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同表示。
UML图:
![](https://img.haomeiwen.com/i3871635/49572f56f97453c9.png)
需求:
我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮(Cold drink)。汉堡(Burger)可以是素食汉堡(Veg Burger)或鸡肉汉堡(Chicken Burger),它们是包在纸盒中。冷饮(Cold drink)可以是可口可乐(coke)或百事可乐(pepsi),它们是装在瓶子中。
我们将创建一个表示食物条目(比如汉堡和冷饮)的Item接口和实现Item接口的实体类,以及一个表示食物包装的Packing接口和实现Packing接口的实体类,汉堡是包在纸盒中,冷饮是装在瓶子中。
然后我们创建一个Meal类,带有Item的ArrayList和一个通过结合Item来创建不同类型的Meal对象的MealBuilder。BuilderPatternDemo,我们的演示类使用MealBuilder来创建一个Meal。
Item接口抽象:
![](https://img.haomeiwen.com/i3871635/493a6626e342735f.png)
Packing包装接口(纸质包装,瓶装):
![](https://img.haomeiwen.com/i3871635/79e50f9a9dd11437.png)
Burger汉堡:
![](https://img.haomeiwen.com/i3871635/4574ffdaad0e796e.png)
ChickenBurger鸡肉汉堡:
![](https://img.haomeiwen.com/i3871635/734035ad3fcb9167.png)
VegBurger蔬菜汉堡:
![](https://img.haomeiwen.com/i3871635/b7cc18ccefca0a31.png)
Bottle瓶装:
![](https://img.haomeiwen.com/i3871635/95425b95aacb8635.png)
Wrapper纸质包装:
![](https://img.haomeiwen.com/i3871635/57945df5f41e1cd8.png)
ColdDrink冷饮:
![](https://img.haomeiwen.com/i3871635/a1ae8c7c0541caf8.png)
Coke可口可乐:
![](https://img.haomeiwen.com/i3871635/7c0b2db1b7c7538d.png)
Pepsi百事可乐:
![](https://img.haomeiwen.com/i3871635/cb08f25d2ef4a166.png)
Meal:
![](https://img.haomeiwen.com/i3871635/048b2a03594b130c.png)
MealBuilder:
![](https://img.haomeiwen.com/i3871635/13ee940ee531f394.png)
BuilderPatternDemo:
![](https://img.haomeiwen.com/i3871635/407674b5e5d2b912.png)
构造了一个鸡肉百事可乐汉堡和一个蔬菜可口可乐汉堡。
网友评论