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     @Override
13     public void buildBody()
14     {
15         // TODO Auto-generated method stub
16         fatpeople.addPart("胖人的身体");
17     }
18 
19     @Override
20     public void buildHand()
21     {
22         // TODO Auto-generated method stub
23         fatpeople.addPart("胖人的手");
24     }
25 
26     @Override
27     public void buildFeet()
28     {
29         // TODO Auto-generated method stub
30         fatpeople.addPart("胖人的脚");
31     }
32 
33     @Override
34     public People getBuildPeople()
35     {
36         // TODO Auto-generated method stub
37         return fatpeople;
38     }
39 }
40 
41 class ThinPeopleBuilder implements IBuilder
42 {
43 
44     private People thinpeople = new People();
45 
46     @Override
47     public void buildHead()
48     {
49         // TODO Auto-generated method stub
50         thinpeople.addPart("瘦人的头");
51     }
52 
53     @Override
54     public void buildBody()
55     {
56         // TODO Auto-generated method stub
57         thinpeople.addPart("瘦人的身体");
58     }
59 
60     @Override
61     public void buildHand()
62     {
63         // TODO Auto-generated method stub
64         thinpeople.addPart("瘦人的手");
65     }
66 
67     @Override
68     public void buildFeet()
69     {
70         // TODO Auto-generated method stub
71         thinpeople.addPart("瘦人的脚");
72     }
73 
74     @Override
75     public People getBuildPeople()
76     {
77         // TODO Auto-generated method stub
78         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

 

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

  

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。