1. 程式人生 > >《大話設計模式》Java程式碼示例(八)之建造者模式

《大話設計模式》Java程式碼示例(八)之建造者模式

建造者模式(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();
    }

}
輸出結果:
【大瘦合體】
我來組成頭部【大瘦】
我來組成身體【大瘦】
我來組成左臂【大瘦】
我來組成右臂【大瘦】
我來組成左腿【大瘦】
我來組成右腿【大瘦】
【小胖合體】
我來組成頭部【小胖】
我來組成身體【小胖】
我來組成左臂【小胖】
我來組成右臂【小胖】
我來組成左腿【小胖】
我來組成右腿【小胖】