http://www.books.com.tw/products/0010750585
chap17.
建造者模式 Builder
目的:將一個由各種組件組合的複雜產品建造過程封裝
package com.ssc24.chap17.demo01;
public class Form {
private String formName;
public Form(String formName) {
this.formName = formName;
}
public String toString() {
return this.formName;
}
}
package com.ssc24.chap17.demo01;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Weapon {
List<String> list = new ArrayList<String>();
public Weapon(String[] weaponArray) {
list.addAll(Arrays.asList(weaponArray));
}
public String toString() {
return list.toString();
}
}
package com.ssc24.chap17.demo01;
public abstract class IRobot {
Form form;
Power power;
Weapon weapon;
public void setForm(Form form) {
this.form = form;
}
public void setPower(Power power) {
this.power = power;
}
public void setWeapon(Weapon weapon) {
this.weapon = weapon;
}
public void display() {
System.out.println("機器人外型:" + form);
System.out.println("機器人動力:" + power);
System.out.println("機器人武器:" + weapon);
}
}
package com.ssc24.chap17.demo01;
public class Gundam extends IRobot {
}
package com.ssc24.chap17.demo01;
public class Power {
private String mainPower;
private String subPower;
private String battery;
public Power(String mainPower,String subPower,String battery) {
this.mainPower = mainPower;
this.subPower = subPower;
this.battery = battery;
}
public String toString() {
return "{主動力:" + this.mainPower + " ,副動力:" + this.subPower + " ,電池:" + this.battery + "}";
}
}
package com.ssc24.chap17.demo01;
public abstract class RobotBuilder {
public abstract Form buildForm();
public abstract Power buildPower();
public abstract Weapon buildWeapon();
}
package com.ssc24.chap17.demo01;
public class GundamBuilder extends RobotBuilder {
@Override
public Form buildForm() {
return new Form("鋼彈");
}
@Override
public Power buildPower() {
return new Power("亞哈反應爐", "Beta發電機", "氫電池");
}
@Override
public Weapon buildWeapon() {
return new Weapon(new String[]{
"60nm 火神砲"
,"突擊長矛"
,"光束劍"
});
}
}
package com.ssc24.chap17.demo01;
public class Director {
private RobotBuilder builder;
public Director(RobotBuilder builder) {
this.builder = builder;
}
public IRobot builderRobot() {
IRobot robot = new Gundam();
robot.setForm(builder.buildForm());
robot.setPower(builder.buildPower());
robot.setWeapon(builder.buildWeapon());
return robot;
}
}
package com.ssc24.chap17.demo01;
import static org.junit.Assert.*;
import org.junit.Test;
public class RobotBuilderTest {
@Test
public void test() {
System.out.println("===建構者模式測試===");
Director director = new Director(new GundamBuilder());
IRobot robot = director.builderRobot();
robot.display();
}
}
/**
===建構者模式測試===
機器人外型:鋼彈
機器人動力:{主動力:亞哈反應爐 ,副動力:Beta發電機 ,電池:氫電池}
機器人武器:[60nm 火神砲, 突擊長矛, 光束劍]
**/