建造者模式

Separate the construction of a complex object from its representation so that the same construction process can create different representations.
將一個複雜的對象的建造過程與他的表示分離,使得同樣的建造過程可以創建不同的表示。

題目:
請用生成器模式(BUILDER)設計一個小人玩具生產線,具體描述如下:
現階段小人玩具生產線需要生成小頭爸爸玩具和大頭兒子玩具共2種,在將來可能會增加新人物。
其中小頭爸爸玩具包含“小的頭”, “強壯的身體”, “長的左手”, “長的右手”, “長的左腳”, “長的右腳”6個部分;
大頭兒子玩具包含“大的頭”, “小小的身體”, “短的左手”, “短的右手”, “短的左腳”, “短的右腳”6個部分;
爲了玩具組裝方便,6個部分的生產順序爲:身體(body)->頭(head)->左手(armLeft)->右手(armRight)->左腳(legLeft)->右腳(LegRight)
題目中小人每一部分的生產只需要通過輸出語句表示即可,比如:生成了長的左手,就用輸出語句輸出“長的左手”即可

UML類圖:

這裏寫圖片描述]![這裏寫圖片描述

GitHub源碼:https://github.com/YEN-GitHub/PatternDemo/tree/master/src/CreationalPattern/builder

package CreationalPattern.builder.demo1;

import java.util.ArrayList;

/**
 * Created by yangenneng on 2017-04-05 11:17
 * Abstract:人
 */
public class Person {

    private ArrayList<String> pParts=new ArrayList<>();
    private ArrayList<String> pPartName=new ArrayList<String>(){{add("頭");add("身體");add("手");add("腳");}};

    public void addPart(String partValue){//增加身體的一部分
        pParts.add(partValue);
    }

    public void ShowPerson(){
        System.out.println("小人的整體結構爲:");
        for (int i = 0; i < pPartName.size(); i++) {
            System.out.println(pPartName.get(i)+":"+pParts.get(i));
        }
    }

}
package CreationalPattern.builder.demo1;

/**
 * Created by yangenneng on 2017-04-05 11:27
 * Abstract:
 */
public interface IBuilder {
    void buildHead();//頭
    void buildBody();//身體
    void buildArm();//手
    void buildLeg();//腳
}
package CreationalPattern.builder.demo1;

/**
 * Created by yangenneng on 2017-04-05 11:28
 * Abstract:瘦子
 */
public class ThinPerson implements IBuilder {

    Person person=new Person();

    @Override
    public void buildHead() {
        person.addPart("方的");
    }

    @Override
    public void buildBody() {
        person.addPart("瘦的");
    }

    @Override
    public void buildArm() {
        person.addPart("短的");
    }

    @Override
    public void buildLeg() {
        person.addPart("細的");
    }

    public Person getPerson(){return person;}
}
package CreationalPattern.builder.demo1;

/**
 * Created by yangenneng on 2017-04-05 11:30
 * Abstract:胖子
 */
public class FatPerson implements IBuilder {
    Person person=new Person();
    @Override
    public void buildHead() {
        person.addPart("圓的");
    }

    @Override
    public void buildBody() {
        person.addPart("胖的");
    }

    @Override
    public void buildArm() {
        person.addPart("長的");
    }

    @Override
    public void buildLeg() {
        person.addPart("粗的");
    }

    public Person getPerson(){return person;}

}
package CreationalPattern.builder.demo1;

/**
 * Created by yangenneng on 2017-04-05 11:34
 * Abstract:
 */
public class PersonDirector {
    public void builderP(IBuilder iBuilder) {
        iBuilder.buildHead();
        iBuilder.buildBody();
        iBuilder.buildArm();
        iBuilder.buildLeg();
    }
}
package CreationalPattern.builder.demo1;

/**
 * Created by yangenneng on 2017-04-05 11:31
 * Abstract:
 */
public class Client {

    public static void main(String[] args) {
        Person person=null;
        System.out.println("--------------創建一個胖子---------------------");
        FatPerson fatPerson=new FatPerson();
        new PersonDirector().builderP(fatPerson);
        person=fatPerson.getPerson();
        person.ShowPerson();
        System.out.println("--------------創建一個瘦子---------------------");
        ThinPerson thinPerson=new ThinPerson();
        new PersonDirector().builderP(thinPerson);
        person=thinPerson.getPerson();
        person.ShowPerson();
    }
}

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章