建造者模式(Builder Pattern) 又名生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节
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;
}
}
public abstract class MealBuilder {
Meal meal = new Meal();
public abstract void buildFood();
public abstract void buildDrink();
public Meal getMeal(){
return meal;
}
}
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("鸡翅");
}
}
public class KFCWaiter {
private MealBuilder mealBuilder;
public KFCWaiter(MealBuilder mealBuilder) {
this.mealBuilder = mealBuilder;
}
public Meal construct(){
mealBuilder.buildFood();//准备食物
mealBuilder.buildDrink();//准备饮料
return mealBuilder.getMeal(); //准备完毕,返回一个完整的套餐给客户
}
}
public class Test {
public static void main(String[] args) {
MealA a = new MealA(); //套餐A
KFCWaiter waiter = new KFCWaiter(a);//准备套餐A的服务员
Meal mealA = waiter.construct(); //获得套餐
System.out.print("套餐A的组成部分:");
System.out.println("食物:"+mealA.getFood()+"; "+"饮品:"+mealA.getDrink());
}
}
应用:
1.StringBuilder 中的 append 方法使用了建造者模式
2.mybatis 中的建造者模式
org.apache.ibatis.session 包下的 SqlSessionFactoryBuilder 类