码迷,mamicode.com
首页 > 编程语言 > 详细

Java 设计模式:创建者模式

时间:2014-11-21 18:37:51      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   color   os   使用   sp   java   

1、什么是创建者模式

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

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

  (1)、Builder 

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

  (2)、ConcreteBuilder

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

  (3)、Director

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

  (3)、Product

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

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

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

  (1)、设计产品类 People

bubuko.com,布布扣
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

bubuko.com,布布扣
interface IBuilder
{
    public void buildHead();

    public void buildBody();

    public void buildHand();

    public void buildFeet();

    public People getBuildPeople();

}
View Code

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

bubuko.com,布布扣
 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

bubuko.com,布布扣
class Director
{
    public void build(IBuilder builder)
    {
        builder.buildBody();
        builder.buildFeet();
        builder.buildHand();
        builder.buildHead();
    }
}
View Code

  (5)、测试

bubuko.com,布布扣
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 设计模式:创建者模式

标签:style   blog   http   ar   color   os   使用   sp   java   

原文地址:http://www.cnblogs.com/zxlong/p/4113241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!