建造者模式

建造者模式包括如下幾個角色
1.builder 抽象建造者                                                                                      爲要建立的產品對象的各個部件指定抽象接口,聲明builderPartX()方法,getResult()方法返回複雜對象方法。
2.concrete Builder 具體建造者                                                                             實現builder接口,實現各個部件的構造和裝配方法,定義並明確它所建立的對象。
3.product 產品角色                                                                                        被構建的複雜對象,被具體建造者建立。
4.Director 指揮者                                                                                         與builder存在關聯關係,能夠在器construct()建造方法中調用對象的部件構造和裝配方法。與客戶端交互,示例化具體建造者對象(經過配置文件或反射機制)。經過構造函數或set()方法,將對象傳入指揮者。
例子

//產品角色  
public class Meal{
	private String food;

	private String drink;

	public void setFood(String food){
		this.food=food;
	}
	public String getFood(){
		return (this.food);
	}

	public void setDrink(String drink){
		this.drink=drink;
	}
	public String getDrink(){
		return (this.drink);
	}
    }
//抽象建造者
public abstract class MealBuilder{
	protected Meal meal = new Meal();

	public abstract void buildFood();

	public abstract void buildDrink();

	public Meal getMeal(){
		return meal;
	}
}
//具體建造者 A
public  class SubMealBuilderA extends MealBuilder{
	public void buildFood(){
		meal.setFood("a hootdog");
	}
	public void buildDrink(){
		meal.setDrink("a cup of coco");
	}
}

//具體建造者 B
public  class SubMealBuildeB extends MealBuilder{
	public void buildFood(){
		meal.setFood("beaf");
	}
	public void buildDrink(){
		meal.setDrink("a cup of silk");
	}
}
//指揮者類
public class KFCWaiter{
	private MealBuilder mb;
	public void setMealBuilder(MealBuilder mb){
		this.mb=mb;
	}
	public Meal construct(){
		mb.buildFood();
		mb.buildDrink();
		return mb.getMeal();
	}
}
//客戶端類
public class ClientBuilder{
	public static void main(String[] args) {
		MealBuilder mb =new SubMealBuilderB();
		KFCWaiter waiter =new KFCWaiter();
		waiter.setMealBuilder(mb);
		Meal meal = waiter.construct();
		System.out.println("----meal----");
		System.out.println(meal.getFood());
		System.out.println(meal.getDrink());	
	}
}


結果:
----meal----
beaf
a cup of silk
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息