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 火神砲, 突擊長矛, 光束劍] **/