設計模式(三)建造者模式(創建型)

 定義:將一個複雜的對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。

使用場景:

      創建的產品有複雜的內部結構,且創建的產品有較多的共同點,其組成部分相似。隔離複雜對象的創建,使得相同的過程可以創建不同的產品。   

與抽象工廠的區別:

     在建造者模式裏,有個指導者,由指導者來管理創造者,用戶是與指導者聯繫的,指導者聯繫創建者得到最後的產品。


角色:

Builder:一個抽象接口,用於規範定義複雜對象的組成部分。

ConcreteBuilder:實現Builder接口,具體化複雜對象的各個部分的創建。

Director:指導者角色,調用具體建造者來創建複雜對象的各個部分。

Product:要創建的複雜對象。


     這裏以一個KFC點餐的案例作爲例子,代碼如下,僅供參考:

     產品類定義

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 Builder {
		
	abstract void buildFood();
	
	abstract void buildDrink();
	
	public Meal getResult(){
		return new Meal();
	}

}

      

       具體建造者定義

public class MealBuilderA extends Builder{
	
	public void buildFood(){
		System.out.println("一個漢堡!");
	}
	
	public void buildDrink(){
		System.out.println("一杯可樂!");
	}

}

public class MealBuilderB extends Builder{
	
	public void buildFood(){
		System.out.println("三個雞翅!");
	}
	
	public void buildDrink(){
		System.out.println("一杯奶茶!");
	}

}

      
      指導者類定義

public class Director {
	
	private Builder builder;
	
	public void setBuilder(Builder builder) {
		this.builder = builder;
	}

	public Meal construct(){
		builder.buildFood();
		builder.buildDrink();
		
		return builder.getResult();
	}

}

       客戶端類定義

public static void main(String[] args){
		//創建指導者
		Director director = new Director();
		System.out.println("========套餐A==========");
		//建造者A
		Builder builderA = new MealBuilderA();
		director.setBuilder(builderA);
		//返回套餐A
		director.construct();
		
		System.out.println("========套餐B==========");
		//建造者B
		Builder builderB = new MealBuilderB();
		director.setBuilder(builderB);
		//返回套餐B
		director.construct();

}

     參考文章:http://blog.csdn.net/chenssy/article/details/11354661


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章