一. 模式结构java
建造者模式主要包含四个角色: ide
Product:产品角色。
Builder:抽象建造者。它声明为建立一个Product对象的各个部件指定的抽象接口。
ConcreteBuilder:具体建造者。实现抽象接口,构建和装配各个部件。
Director:指挥者。构建一个使用Builder接口的对象。它主要是用于建立一个复杂的对象,它主要有两个做用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。
二. 模式实现测试
KFC里面通常都有好几种可供客户选择的套餐,它能够根据客户所点的套餐,而后在后面作这些套餐,返回给客户的事一个完整的、美好的套餐。下面咱们将会模拟这个过程,咱们约定套餐主要包含汉堡、薯条、可乐、鸡腿等等组成部分,使用不一样的组成部分就能够构建出不一样的套餐。
1. Meal.java 套餐类,Product角色ui
public class Meal { private String food; private String drink; public String getFood() { return food; } public void setFood(String food) { this.food = food; } public String getDrink() { return drink; } public void setDrink(String drink) { this.drink = drink; } }
2. MealBuilder.java 套餐构造器,Builder角色this
public abstract class MealBuilder { Meal meal = new Meal(); public abstract void buildFood(); public abstract void buildDrink(); public Meal getMeal(){ return meal; } }
3. 套餐A、套餐B 实现抽象套餐类,ConcreteBuilder角色spa
public class MealA extends MealBuilder{ public void buildDrink() { meal.setDrink("一杯可乐"); } public void buildFood() { meal.setFood("一盒薯条"); } } public class MealB extends MealBuilder{ public void buildDrink() { meal.setDrink("一杯柠檬果汁"); } public void buildFood() { meal.setFood("三个鸡翅"); } }
4. KFC的服务员 它决定了套餐是的实现过程,而后给你一个完美的套餐,Director角色3d
public class KFCWaiter { private MealBuilder mealBuilder; public void setMealBuilder(MealBuilder mealBuilder) { this.mealBuilder = mealBuilder; } public Meal construct(){ //准备食物 mealBuilder.buildFood(); //准备饮料 mealBuilder.buildDrink(); //准备完毕,返回一个完整的套餐给客户 return mealBuilder.getMeal(); } }
三. 测试 code
public class Client { public static void main(String[] args) { //服务员 KFCWaiter waiter = new KFCWaiter(); //套餐A MealA a = new MealA(); //服务员准备套餐A waiter.setMealBuilder(a); //得到套餐 Meal mealA = waiter.construct(); System.out.print("套餐A的组成部分:"); System.out.println(mealA.getFood()+"---"+mealA.getDrink()); } }
运行结果:套餐A的组成部分:一盒薯条---一杯可乐对象
四. 模式总结
blog
1. 建造者模式是将一个复杂对象的建立过程给封装起来,客户只须要知道能够利用对象名或者类型就可以获得一个完整的对象实例,而不须要关心对象的具体建立过程。
2. 建造者模式将对象的建立过程与对象自己隔离开了,使得细节依赖于抽象,符合依赖倒置原则。能够使用相同的建立过程来建立不一样的产品对象。