首页 > 代码库 > Java 设计模式:创建者模式

Java 设计模式:创建者模式

1、什么是创建者模式

  创建者模式(Builder)是将一个复杂的对象的构建和他的表示分离,使得同样的构建过程可以创建不同的表示。比如就建造房子为例,现实生活中房子的样子是各种各样的,而且每座房子内的格局、大小等等都不一样,但是建造房子的流程基本都是一样的。创建者模式就是创建的流程保持不变,但是流程中每一步的细节是可以变化的,从而创建出不同的产品。

  创建者模式中包括以下几个角色

  (1)、Builder 

    抽象建造者类,规定了产品的各个组成部分,并声明获取建造完成后产品的抽象方法。

  (2)、ConcreteBuilder

    具体建造者类,根据不同对象的创建逻辑,具体化创建过程,建造完成后可以获取具体产品。

  (3)、Director

    指挥者类,调用不同的创建者建造具体产品的各个组成部分,保证具体产品各个部分按固定流程创建。

  (3)、Product

    要创建的产品,有不同的部件组成。

2、同样使用《大话设计模式》中造小人的例子用Java实现。

  在游戏角色中需要创建人物,人物包括头、手、身体、脚等信息,但是又分为胖的人物和瘦的人物。代码如下

  (1)、设计产品类 People

class People{    private List<String> parts = new ArrayList<String>();    public void addPart(String part)    {        this.parts.add(part);    }    public void show()    {        System.out.println("产品信息.......");        for (int i = 0; i < parts.size(); i++)        {            System.out.println(parts.get(i));        }    }}
View Code

  (2)、设计抽象建造者类IBuilder

interface IBuilder{    public void buildHead();    public void buildBody();    public void buildHand();    public void buildFeet();    public People getBuildPeople();}
View Code

  (3)、设计具体建造者类FatPeopleBuilder和ThinPeopleBuilder

 1 class FatPeopleBuilder implements IBuilder 2 { 3     private People fatpeople = new People(); 4  5     @Override 6     public void buildHead() 7     { 8         // TODO Auto-generated method stub 9         fatpeople.addPart("胖人的头");10     }11 12     @Override13     public void buildBody()14     {15         // TODO Auto-generated method stub16         fatpeople.addPart("胖人的身体");17     }18 19     @Override20     public void buildHand()21     {22         // TODO Auto-generated method stub23         fatpeople.addPart("胖人的手");24     }25 26     @Override27     public void buildFeet()28     {29         // TODO Auto-generated method stub30         fatpeople.addPart("胖人的脚");31     }32 33     @Override34     public People getBuildPeople()35     {36         // TODO Auto-generated method stub37         return fatpeople;38     }39 }40 41 class ThinPeopleBuilder implements IBuilder42 {43 44     private People thinpeople = new People();45 46     @Override47     public void buildHead()48     {49         // TODO Auto-generated method stub50         thinpeople.addPart("瘦人的头");51     }52 53     @Override54     public void buildBody()55     {56         // TODO Auto-generated method stub57         thinpeople.addPart("瘦人的身体");58     }59 60     @Override61     public void buildHand()62     {63         // TODO Auto-generated method stub64         thinpeople.addPart("瘦人的手");65     }66 67     @Override68     public void buildFeet()69     {70         // TODO Auto-generated method stub71         thinpeople.addPart("瘦人的脚");72     }73 74     @Override75     public People getBuildPeople()76     {77         // TODO Auto-generated method stub78         return thinpeople;79     }80 81 }
View Code

  (4)、设计调度类Director

class Director{    public void build(IBuilder builder)    {        builder.buildBody();        builder.buildFeet();        builder.buildHand();        builder.buildHead();    }}
View Code

  (5)、测试

public class BuilderTest{    public static void main(String args[])    {        Director director = new Director();        IBuilder builder = new FatPeopleBuilder();        // 创建胖人        director.build(builder);        builder.getBuildPeople().show();        // 创建瘦人        builder = new ThinPeopleBuilder();        director.build(builder);        builder.getBuildPeople().show();    }}
View Code

 

  创建者模式的好处是客户端不必关系产品对象的具体组成细节,具体的建造者之间相互独立方便扩展。

  

  

Java 设计模式:创建者模式