建造者模式(Builder和Director)

一、建造者模式介绍

建造者模式:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示]

假如一个对象的构建很复杂,需要很多步骤。则可以使用建造者模式,将其构建对象和组装成一个对象这两步给分开来。构建部分为(builder)和组织部分(director),实现了构建和装配的解耦。

不同的构建器,相同的装配也可以做出不同的对象。

相同的构建器,不同的装配顺序也可以做出不同的对象。

例如:现在要生产一个汽车,会有很多零件,有了零件还需要把这些零件组装成一个完整的汽车。建造者模式就是将构建零件(builder)和组装零件(director)两个操作给分开。

与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。

二、代码实现

代码的具体实现:宇宙飞船的实现

1、假如现在要构建一个宇宙飞船对象,先定义一个宇宙飞船对象,有一些简单的属性。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

/**

 * 宇宙飞船

 */

public class AirShip {

    private OrbitalModule orbitalModule;//轨道舱

    private Engine engine;//发动机

    private EscapeTower escapeTower;//逃逸塔

    //省略get,set,构造器

}

//轨道舱

class OrbitalModule{

    private String name;

    //省略get,set,构造器

}

//发动机

class Engine{

    private String name;

    //省略get,set,构造器

}

//逃逸塔

class EscapeTower{

    private String name;

    //省略get,set,构造器

}

2、有了以上属性后,接下来就可以将飞船中部分零件给构建出来了。为了以后构建不同种类的飞船,这里使用接口来定义构建。有什么类型的飞船就用什么

类来实现该接口。


1

2

3

4

5

6

7

8

/**

 * 构建接口:用来构建AirShipz中组件的接口

 */

public interface AirShipBuilder {

    Engine builderEngine();//构建发动机

    OrbitalModule builderOrbitalModule();//构建轨道舱

    EscapeTower builderEscapeTower();//构建逃逸塔

}

3、把这些零件构建完成后,就需要把构建好的这些组件构建成一个完整的飞船(AirShip)了。使用接口来定义,不同类型的飞船组装可以用不同的具体实现。


1

2

3

4

5

6

7

8

9

10

/**

 * 组装接口:用于将飞船组件组装起来

 */

public interface AirShipDirector {

    /**

     * 组装飞船

     * @return

     */

    AirShip directorAirShip();

}

4、开始真正的实现飞船的构建和飞船的组装

4.1、 飞船的构建的实现


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

/**

 * 具体飞船的构造

 */

public class FzAirShipBuilder implements AirShipBuilder{

    @Override

    public Engine builderEngine() {

        System.out.println("万能牌发动机");

        return new Engine("万能牌发动机");

    }

    @Override

    public OrbitalModule builderOrbitalModule() {

        System.out.println("万能牌轨道舱");

        return new OrbitalModule("万能牌轨道舱");

    }

    @Override

    public EscapeTower builderEscapeTower() {

        System.out.println("万能牌逃逸塔");

        return new EscapeTower("万能牌逃逸塔");

    }

}

4.2、 具体飞船的组装实现:这里需要注意,组装是需要依赖于构建的(飞船的完整组装需要飞机的各部件构建成功才能组装)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

/**

 * 具体飞船的组装

 */

public class FzAirShipDirector implements AirShipDirector{

    private AirShipBuilder builder;//创建构建者的引用

    public FzAirShipDirector(AirShipBuilder airShipBuilder) {

        this.builder = airShipBuilder;

    }

    /**

     * 组装具体的对象,为了简单,这里的组装步骤比较简单。实际产品中较复杂

     */

    @Override

    public AirShip directorAirShip() {

        Engine e = builder.builderEngine();//构建发动机

        EscapeTower et = builder.builderEscapeTower();//构建逃逸塔

        OrbitalModule o = builder.builderOrbitalModule();//构建轨道舱

        //装配对象

        AirShip ship = new AirShip();

        ship.setEngine(e);

        ship.setEscapeTower(et);

        ship.setOrbitalModule(o);

        return ship;

    }

}

5、在我们客户具体使用的时候,只需要知道构建接口、组装接口和一个飞船对象,我们根本不需要知道内部怎么组装的,内部有多少零件。

只需要知道怎么使用组装即可。


1

2

3

4

5

6

7

8

public static void main(String[] args) {

    

    AirShipDirector shipDirector = new FzAirShipDirector(new FzAirShipBuilder());

    

    AirShip airShip = shipDirector.directorAirShip();//构建对象

    

//      System.out.println(airShip.getEngine());

}

结果如下:

万能牌发动机

万能牌逃逸塔

万能牌轨道舱

三、建造者模式应用场景:

如果一个对象的构建很复杂,需要很多步骤,则考虑使用建造者模式,把对象的构建和最后的组装分离开来。

在平常使用的类中如果后缀为builder则就是建造者模式

StringBuilder类的apend方法

SQL中的PreparedStatement

JDOM中的DomBuilder、SAXBuilder

来自为知笔记(Wiz)

时间: 2024-11-04 14:20:47

建造者模式(Builder和Director)的相关文章

建造者模式<Builder>

概述 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式 角色 建造者(Builder):为创建一个产品对象的各个部件指定抽象接口. 具体建造者(ConcreteBuilder):实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口 产品(Product):表示被构造的复杂对象.ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最

设计模式—建造者模式(Builder)

title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对象创建型模式.我们获得一个对象的时候不是直接new这个对象出来,而是对其建造者进行属性设置,然后建造者在根据设置建造出各个对象出来.建造者模式又可以称为生成器模式. 模式结构 一个标准的建造者模式包含如下角色: Builder:抽象建造者 ConcreteBuilder:具体建造者 Director

建造者模式(Builder)——从组装电脑开始

建造者模式(Builder)--从组装电脑开始 建造者模式概括起来就是将不同独立的组件按照一定的条件组合起来构成一个相对业务完整的对象.调用者无需知道构造的过程. 我们从组装电脑开始 让我们从买组装电脑开始吧. 首先要买一个电脑,一般都有两个选择 -- 品牌电脑和组装电脑,一般人为了省事和放心都会选择买品牌电脑(也就是整机).在这里,为了更好的分析问题,假定我们为了性价比决定要买组装电脑.那么我们该怎么做呢. 首先我们得学习一个完整的电脑的组成部分有哪些? 经过翻查一部分资料发现,主要部件分为主

建造者模式(Builder)

定义 (本人在阅读完本书的中英两个版本之后发现对建造者模式十窍懂了九窍,所以直接去网上搜别人的分析了,所以本章大部分是根据网上的资料收集来的,此外,代码例子表示本书的例子不合适,也换了,所以本章和这本书关系不大.) 建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.建造者模式最重要的两个角色:抽象建造者(Builder)和指导者(Director),其中建造者知道怎么(How)去建造产品,而指导者知道去制造什么(What)产品,建造者模式用建房子的例子来说明

23种设计模式--建造者模式-Builder Pattern

一.建造模式的介绍       建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建造者模式的具体体现,组装电脑反应到软件上就是一个复杂的对象,然后我们使用建造者模式的时候需要抽象一个建造类,抽象一个指挥者指挥具体实现的那个类,然后就是具体实现这个对象的类,这样就避免了每新创建一个不同的复杂对象就需要重新写一下这个类,这样就只要重写建造者就可以了,我们接下来就用组装电脑这个来说明一

设计模式之建造者模式Builder(创建型)

1. 概述 在软件开发的过程中,当遇到一个“复杂的对象”的创建工作,该对象由一定各个部分的子对象用一定的算法构成,由于需求的变化,复杂对象的各个部分经常面临剧烈的变化,但将它们组合在一起的算法相对稳定. 例子1:买肯德基 典型的儿童餐包括一个主食,一个辅食,一杯饮料和一个玩具(例如汉堡.炸鸡.可乐和玩具车).这些在不同的儿童餐中可以是不同的,但是组合成儿童餐的过程是相同的.        客户端:顾客,想去买一套套餐(这里面包括汉堡,可乐,薯条),可以有1号和2号两种套餐供顾客选择.      

设计模式之九:建造者模式(Builder)

建造者模式: 将一个复杂对象的建造过程和它的表示分离开来,这样相同的建造过程可以创建不同的表示. Separate the construction of a complex object from its representation so that the same construction process can create different representations. 通俗一点就是如果流程是一样的,可以将这些流程抽象成一个类的一些接口,具体的创建过程可以在这个抽象类的子类中来实

【转】设计模式(三)建造者模式Builder(创建型)

(http://blog.csdn.net/hguisu/article/details/7518060) 1. 概述 在软件开发的过程中,当遇到一个"复杂的对象"的创建工作,该对象由一定各个部分的子对象用一定的算法构成,由于需求的变化,复杂对象的各个部分经常面临剧烈的变化,但将它们组合在一起的算法相对稳定. 例子1:买肯德基 典型的儿童餐包括一个主食,一个辅食,一杯饮料和一个玩具(例如汉堡.炸鸡.可乐和玩具车).这些在不同的儿童餐中可以是不同的,但是组合成儿童餐的过程是相同的.   

5.建造者模式(Builder Pattern)

using System; using System.Collections.Generic; namespace ConsoleApplication4 { class Program { /// <summary> /// 以组装电脑为例子 /// 每台电脑的组成过程都是一致的,但是使用同样的构建过程可以创建不同的表示(即可以组装成不一样的电脑,配置不一样) /// 组装电脑的这个场景就可以应用建造者模式来设计 /// </summary> /// <param name

设计模式(创建型)之建造者模式(Builder Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! 概述 建造者模式将客户端与包含多个组成部分的复杂对象的创建过程分离,客户端压根不用知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可.它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性. 问题来了... 你可能会有疑惑,建造者模式和抽象工