建造者设计模式的定义
当使用单一方法或者单一的对象来创建会比较繁琐,创建复杂对象发生变化时,系统会面临变化,建造者模式将一个复杂对象的构建和表示分离,使用同样的构建过程创建不同的表示。
建造者模式的四个角色:
- .Builder:抽象建造者,声明为创建一个product对象的各个部件特定抽象接口
- ConcreteBuilder:具体建造者,实现抽象接口,构建和装配各个软件
- Director:指挥者,主要作用是创建一个复杂的对象,其还有两个作用:隔离客户和对象的生产过程;负责控制产品对象的生产过程。
- Product:产品角色,一个具体的产品对象
建造者模式的使用场景
- 当生成的产品对象内部具有复杂的结构时。
- 当复杂对象需要与表示分离,可能需要创建不同的表示。
- 需要向客户隐藏内部结构的表现。
综上所述,建造者模式适用于对象结构复杂,对象构造和表示分离的情况,请看如下例子
//首先创造一个套餐类
pbulic class Meal{
private String food;
private String drink;
public String getFood(){
retrun food;
}
pbulic void setFood(String food){
this.food=food;
}
public String getDrink(){
return drink;
}
public void setDrink(String drink){
this.drink=drink;
}
}
//创建套餐构造器
public abstract class MealBuilder{
Meal meal = new Meal();
public abstract void builFood();
public abstract void builDrink();
public Meal getMeal(){
return meal;
}
}
//创造一个服务员的类
public class Waiter{
private MealBuilder mealBuilder;
public void setMealBuilder(MealBuilder mealBuilder){
this.mealBuilder = mealBuilder;
}
public Meal construct(){
//准备食物
mealBuilder.buildFood();
//准备饮品
mealBuilder.buildDrink();
//准备完毕,返回一个完整的套餐
return mealBuilder.getMeal();
}
}
//实现抽象类
public class MealA extends MealBuilder {
public void buildDrink() {
meal.setDrink("一杯饮料!");
}
public void buildFood() {
meal.setFood("一个汉堡!");
}
}
//抽象类2
public class MealB extends MealBuilder {
@Override
public void buildFood() {
meal.setDrink("一杯果汁");
}
@Override
public void buildDrink() {
meal.setFood("一个鸡排!");
}
}
/*
* 测试类
* */
public class Text {
public static void main(String[] args) {
//服务员
Waiter waiter = new Waiter();
//套餐A
MealA a= new MealA();
//套餐B
MealB b = new MealB();
//服务员准备套餐A
waiter.setMealBuilder(a);
//获得套餐
Meal mealA = waiter.construct();
System.out.println("套餐A的组成部分");
System.out.println(mealA.getFood()+"---"+mealA.getDrink());
}
}
测试结果:
优缺点
优点:
1.将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,能够控制复杂对象的产生过程;
2.将产品的创建过程与产品本身分离开来,可以使用相同的创建过程来得到不同的产品,细节依赖于抽象;
3.每一个具体建造者相对独立,和其他的建造者无关,方便替换具体建造者或者具体建造者,用户使用不同的创造者得到不同的产品。
缺点:
1.建造者模式创建的产品有较多的相同点组成部分相似,产品件的属性等差异较大时不适合使用建造者模式;
2.产品的内部变化复杂时会导致建造者类实现变化的这个过程。