設計模式-建造者模式

建造者模式

將一個複雜的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示。
建造模式是將複雜的內部創建封裝在內部,對於外部調用的人來說,只需要傳入建造者和建造工具,對於內部是如何建造成成品的,調用者無需關心。

分類

抽象建造者(Abstract Builder)角色:給出一個抽象解耦,以規範產品對象的各個組成成分建造。具體建造者類必須實現這個接口鎖要求的兩種方法:一種是建造方法,另一種是結果返還方法。有多少零件就應該有多少建造方法。
具體建造者(Concrete Builder)角色:擔任這個角色的是與應用程序緊密相關的一些類,它們在應用程序調用下創建產品實例。它要完成的任務包括:
A.實現抽象建造者鎖聲明的接口,給出一步一步地完成創建產品實例的操作;
B.在建造完成之後,提供產品實例。
導演者(Director)角色:調用具體建造者角色以創建產品對象,它與客戶端打交道。
產品(Product)角色:它是建造中的複雜對象。

簡單實例

抽象建造者:

public interface Builder {
	
	public void createFloor();
	
	public void createWall();
	
	public void createRoof();
	
	public void createWindow();

}

真實建造者:

中式風格建造

public class ChinaWorker implements Builder {


	public House house = new ChinaHouse();
	
	@Override
	public void createFloor() {
		house.setFloor(" create china Floor  ");
	}

	@Override
	public void createRoof() {
		house.setRoof(" create china Roof  ");
	}

	@Override
	public void createWall() {
		house.setWall(" create china Roof  ");
	}

	@Override
	public void createWindow() {
		house.setWindow(" create china Window  ");
	}

	@Override
	public House getHouse() {
		return house;
	}

}
英式風格建造者
public class EnglishWorker implements Builder {

	public House house = new EnglishHouse();
	
	
	@Override
	public void createFloor() {
		house.setFloor(" create english Floor  ");
	}

	@Override
	public void createRoof() {
		house.setRoof(" create english Roof  ");
	}

	@Override
	public void createWall() {
		house.setWall(" create english Roof  ");
	}

	@Override
	public void createWindow() {
		house.setWindow(" create english Window  ");
	}

	@Override
	public House getHouse() {
		return house;
	}

}
產品:

public class House {
	
	public String floor;
	
	public String wall;
	
	public String roof;
	
	public String window;

	public String getFloor() {
		return floor;
	}

	public void setFloor(String floor) {
		this.floor = floor;
	}

	public String getWall() {
		return wall;
	}

	public void setWall(String wall) {
		this.wall = wall;
	}

	public String getRoof() {
		return roof;
	}

	public void setRoof(String roof) {
		this.roof = roof;
	}

	public String getWindow() {
		return window;
	}

	public void setWindow(String window) {
		this.window = window;
	}
}

public class ChinaHouse extends House {

}

public class EnglishHouse extends House {

}

導演:

public class Designer {
	public void command(Builder builder) {
		builder.createFloor();
		builder.createRoof();
		builder.createWall();
		builder.createWindow();
	}
}

客戶端:

public class Client {
	public static void main(String[] args) {
		Builder builder = new ChinaWorker();
		House house = new  Designer().command(builder);
		System.out.println(house.window);
		builder = new EnglishWorker();
		house = new  Designer().command(builder);
		System.out.println(house.window);
//		create china Window  
//		create english Window  
	}
}



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