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