设计模式-建造者模式

建造者模式

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。

分类

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



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