建造者模式

来源:互联网 发布:网络作家收入怎么算 编辑:程序博客网 时间:2024/06/08 14:31

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();    }}

这里写图片描述

0 0
原创粉丝点击