《大話設計模式》Java程式碼示例(八)之建造者模式
阿新 • • 發佈:2018-12-18
建造者模式(Builder):將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
package builder; /** * 建造者模式(Builder) * 建造者抽象類 */ public abstract class PersonBuilder { public abstract void buildHead(); public abstract void buildBody(); public abstract void buildArmLeft(); public abstract void buildArmRight(); public abstract void buildLegLeft(); public abstract void buildLegRight(); }
package builder; /** * 建造者模式(Builder) * 大瘦建造類 */ public class PersonThinBuilder extends PersonBuilder { @Override public void buildHead() { System.out.println("我來組成頭部【大瘦】"); } @Override public void buildBody() { System.out.println("我來組成身體【大瘦】"); } @Override public void buildArmLeft() { System.out.println("我來組成左臂【大瘦】"); } @Override public void buildArmRight() { System.out.println("我來組成右臂【大瘦】"); } @Override public void buildLegLeft() { System.out.println("我來組成左腿【大瘦】"); } @Override public void buildLegRight() { System.out.println("我來組成右腿【大瘦】"); } }
package builder; /** * 建造者模式(Builder) * 小胖建造類 */ public class PersonFatBuilder extends PersonBuilder { @Override public void buildHead() { System.out.println("我來組成頭部【小胖】"); } @Override public void buildBody() { System.out.println("我來組成身體【小胖】"); } @Override public void buildArmLeft() { System.out.println("我來組成左臂【小胖】"); } @Override public void buildArmRight() { System.out.println("我來組成右臂【小胖】"); } @Override public void buildLegLeft() { System.out.println("我來組成左腿【小胖】"); } @Override public void buildLegRight() { System.out.println("我來組成右腿【小胖】"); } }
package builder;
/**
* 建造者模式(Builder)
* 指揮者
*/
public class PersonDirector {
private PersonBuilder personBuilder;
public PersonDirector(PersonBuilder personBuilder) {
this.personBuilder = personBuilder;
}
public void createPerson() {
personBuilder.buildHead();
personBuilder.buildBody();
personBuilder.buildArmLeft();
personBuilder.buildArmRight();
personBuilder.buildLegLeft();
personBuilder.buildLegRight();
}
}
package builder;
/**
* 建造者模式(Builder)
* 客戶端main方法
*/
public class Client {
public static void main(String[] args) {
System.out.println("【大瘦合體】");
PersonThinBuilder ptb = new PersonThinBuilder();
PersonDirector pdThin = new PersonDirector(ptb);
pdThin.createPerson();
System.out.println("【小胖合體】");
PersonFatBuilder pfb = new PersonFatBuilder();
PersonDirector pdFat = new PersonDirector(pfb);
pdFat.createPerson();
}
}
輸出結果:
【大瘦合體】
我來組成頭部【大瘦】
我來組成身體【大瘦】
我來組成左臂【大瘦】
我來組成右臂【大瘦】
我來組成左腿【大瘦】
我來組成右腿【大瘦】
【小胖合體】
我來組成頭部【小胖】
我來組成身體【小胖】
我來組成左臂【小胖】
我來組成右臂【小胖】
我來組成左腿【小胖】
我來組成右腿【小胖】