天天看點

23種設計模式(4)建造者模式(Builder模式)

建造者模式是一步一步建立一個複雜的對象,它允許使用者隻通過指定複雜對象的類型和内容就可以建構它們,使用者不需要知道内部的具體建構細節

以肯德基套餐為例

1、産品角色

建立一個産品類Meal

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、抽象建造者

建立一個Product對象的各個部件指定的抽象類

public abstract class MealBuilder {
    Meal meal = new Meal();
    
    public abstract void buildFood();
    
    public abstract void buildDrink();
    
    public Meal getMeal(){
        return meal;
    }
}
           

3、具體建造者

繼承抽象類,建構和裝配各個部件

A套餐:

public class MealA extends MealBuilder{
    public void buildDrink() {
        meal.setDrink("可樂");
    }
    public void buildFood() {
        meal.setFood("薯條");
    }
}
           

B套餐:

public class MealB extends MealBuilder{
    public void buildDrink() {
        meal.setDrink("檸檬果汁");
    }
    public void buildFood() {
        meal.setFood("雞翅");
    }
}
           

4、指揮官

建構一個使用Builder接口的對象

public class KFCWaiter {
    private MealBuilder mealBuilder;
    
    public KFCWaiter(MealBuilder mealBuilder) {
        this.mealBuilder = mealBuilder;
    }    
    public Meal construct(){
        //準備食物
        mealBuilder.buildFood();
        //準備飲料
        mealBuilder.buildDrink();        
        //準備完畢,傳回一個完整的套餐給客戶
        return mealBuilder.getMeal();
	 }
}
           

5、測試類

public class Test {
   public static void main(String[] args) {
        //套餐A
        MealA a = new MealA();
        //準備套餐A的服務員
        KFCWaiter waiter = new KFCWaiter(a);
        //獲得套餐
        Meal mealA = waiter.construct();      
        System.out.print("套餐A的組成部分:");
        System.out.println("食物:"+mealA.getFood()+";   "+"飲品:"+mealA.getDrink());
    }
}
           
23種設計模式(4)建造者模式(Builder模式)

繼續閱讀