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

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

interface IBuilder
{
    public void buildHead();

    public void buildBody();

    public void buildHand();

    public void buildFeet();

    public People getBuildPeople();

}

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

  (4)、设计调度类Director

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

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

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

  

  

时间: 2024-08-26 11:04:45

Java 设计模式:创建者模式的相关文章

Java 设计模式 -- 复合模式之二

接着上文的鸭鸣例子:Java 设计模式 -- 复合模式之一 上文中,我们的鸭鸣实现了 装饰者模式  适配器模式  工厂模式的结合 现在,又需要进行改动了,上文,是可以统计一群鸭子的叫声,现在需要能够观察个别鸭子的行为 引入观察者模式: 任何想被观察的Quackable都必须实现下面的接口 public interface QuackObservable { public void registerObserver(Observer observer); public void notifyobs

一起学java设计模式--代理模式(结构型模式)

代理模式 应用软件所提供的桌面快捷方式是快速启动应用程序的代理,桌面快捷方式一般使用一张小图片来表示(Picture),通过调用快捷方式的run()方法将调用应用软件(Application)的run()方法.使用代理模式模拟该过程,绘制类图并编程实现. package ProxyPattern; interface Software { void run(); } class Application implements Software { public void run() { Syste

Java设计模式-代理模式之动态代理(附源码分析)

Java设计模式-代理模式之动态代理(附源码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的区别就是:动态代理是在运行时刻动态的创建出代理类及其对象.上篇中的静态代理是在编译的时候就确定了代理类具体类型,如果有多个类需要代理,那么就得创建多个.还有一点,如果Subject中新增了一个方法,那么对应的实现接口的类中也要相应的实习该方法,不符合设计模式原则. 动态代理的做法:在运行时刻,可以动态创建出一个实现了多个接口的代理类.每个代理类的对象都会关联一个表示内部处理

Java设计模式-代理模式之动态代理(附源代码分析)

Java设计模式-代理模式之动态代理(附源代码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的差别就是:动态代理是在执行时刻动态的创建出代理类及其对象. 上篇中的静态代理是在编译的时候就确定了代理类详细类型.假设有多个类须要代理.那么就得创建多个. 另一点,假设Subject中新增了一个方法,那么相应的实现接口的类中也要相应的实现这些方法. 动态代理的做法:在执行时刻.能够动态创建出一个实现了多个接口的代理类.每一个代理类的对象都会关联一个表示内部处理逻辑的Inv

Java设计模式-代理模式之静态代理

Java设计模式-代理模式之静态代理 概念 为另一个对象提供一个替身或占位符以提供对这个对象的访问,使用代理模式创建代表对象,让代表对象控制某对象的访问,被代理对象可以是远程的对象.创建开销大的对象或需要安全控制的对象 远程代理控制访问远程对象 虚拟代理控制访问创建开销大的资源 保护代理基于权限控制对资源的访问 看如下的类图: 仔细看上面的类图,首先是Subject它为RealSubject和Proxy提供了接口,通过实现同一个接口,Proxy在RealSubject出现的地方取代它,这点和适配

Java设计模式--生成器模式

将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示. Builder Pattern Separate the construction of a complex object from its representation so that the same construction process can create different representations. 类图 模式的结构与使用 生成器模式的结构中包括四个角色. 产品(Product):具体生成器要构造的复

java语言实现创建型设计模式—创建者模式

一.描述 创建者模式单独利用一个创建者类来创建对象并组建对象之间的关系,以简化客户端调用的复杂性.相对于抽象方法模式来说,创建者模式增加了一个单独的用于组装对象和对象之间关系的创建者类,由该类来负责对象的组装,以此来更加清晰地划分各个类的职责. 创建者模式将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示,而且对客户端屏蔽了对象的构建细节,该模式主要由5个部分组成:组装类.抽象创建者类,实现了抽象创建者类的具体创建者类,抽象产品类.实现了抽象产品类的具体产品类.在此可以看出

Java设计模式——迭代器模式

概述 网上大部分人说迭代模式的时候,总是以某一种可遍历的对象为例进行介绍.这是可行的,这也是迭代模式的基本原型.当我看到<Head Frist设计模式>中迭代模式的时候,感觉要是能从另一个角度来说明,可能更能够体现迭代模式的威力所在. 本文介绍的这种迭代模式,倒是更像是适配器-迭代器模式.希望于你有益~ 版权说明 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Coding-Naga发表日期: 2016年3月4日链接:http://blog.csdn.net/lemo

Java设计模式——原型模式

概述 原型模式是为了解决一些不必要的对象创建过程.当Java JDK中提供了Cloneable接口之后,原型模式就变得异常的简单了.虽然由于Cloneable的引入使用程序变得更简单了,不过还是有一些需要说明和注意的东西在里面的.文本就详细讲解一下这些注意事项吧. 版权说明 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Coding-Naga发表日期: 2016年3月3日链接:http://blog.csdn.net/lemon_tree12138/article/d

java设计模式 - 创建者(干货)

深度讲解23种设计模式,力争每种设计模式都刨析到底.废话不多说,开始第二种设计模式 - 创建者. 顾名思义,创建者模式是用来创建对象的.根据笔者的经验,这种创建模式适用于复杂对象的创建. 我们先来看一下类图关系: 当创建Person对象时(假设Person对象中有非常多的属性),而我们挨个属性设置的时候,就会非常麻烦,还有可能会出现不同属性是在不同阶段中来设置, 也就是分步来设置的时候,不但属性容易丢失,而且代码阅读会比较头疼,那么这个时候,创建者模式将会是你非常棒的选择. Person类如下