builder模式

interface IBuilder {
	public void buildCPU();
	public void buildScreen();
	public void buildBattery();
	public Phone getPhone();
}
public class Builder {

	public static void main(String[] args) {

		Designer ds = new Designer();
		IBuilder appleBuilder = new AppleBuilder();
		ds.buildPhone(appleBuilder);
		Phone apple = appleBuilder.getPhone();
		System.out.println(apple);
		
		IBuilder samsungBuilder = new SamsungBuilder();
		ds.buildPhone(samsungBuilder);
		Phone samsung = samsungBuilder.getPhone();
		System.out.println(samsung);
		
	}
}
class Designer {
	public void buildPhone(IBuilder builder) {
		System.out.println("begin build phone ");
		builder.buildCPU();
		builder.buildBattery();
		builder.buildScreen();
		System.out.println("end build phone...");
	}
}
class AppleBuilder implements IBuilder {
	private Phone phone = new Apple();
	public void buildCPU() {
		System.out.println("build CPU: Qualcomm");
		phone.add("CPU: Qualcomm");
	}
	public void buildScreen() {
		System.out.println("build SCREEN: JDI");
		phone.add("SCREEN: JDI");
	}
	public void buildBattery() {
		System.out.println("build BATTERY: DeSai");
		phone.add("BATTERY: DeSai");
	}
	public Phone getPhone() {
		return this.phone;
	}
}
class SamsungBuilder implements IBuilder {
	private Phone phone = new Samsung();
	public void buildCPU() {
		System.out.println("build CPU: MTK");
		phone.add("CPU: MTK");
	}
	public void buildScreen() {
		System.out.println("build SCREEN: Samsung");
		phone.add("SCREEN: Samsung");
	}
	public void buildBattery() {
		System.out.println("build BATTERY: DeSai");
		phone.add("BATTERY: DeSai");
	}
	public Phone getPhone() {
		return this.phone;
	}
}
abstract class Phone {
	protected List<String> parts = new ArrayList<String>();
	public void add(String part) {
		this.parts.add(part);
	}
	
	public abstract String getBrand();
	@Override public String toString() {
		StringBuilder result = new StringBuilder();
		result.append(this.getBrand()).append("手机信息:");
		for (String part : parts)
			result.append(part).append(" ");
		return result.toString();
	}
}
class Apple extends Phone {
	@Override public String getBrand() {
		return "Apple";
	}
}
class Samsung extends Phone {
	@Override public String getBrand() {
		return "Samsung";
	}
}

 * 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
 * 复杂对象的创建
 * 构造器和静态工厂方法中参数过多是使用Builder

输出为:

begin build phone
build CPU: Qualcomm
build BATTERY: DeSai
build SCREEN: JDI
end build phone...
Apple手机信息:CPU: Qualcomm BATTERY: DeSai SCREEN: JDI
begin build phone
build CPU: MTK
build BATTERY: DeSai
build SCREEN: Samsung
end build phone...
Samsung手机信息:CPU: MTK BATTERY: DeSai SCREEN: Samsung

猜你喜欢

转载自jaesonchen.iteye.com/blog/2286887