[设计模式] 4 创建者模式 builder

转载http://blog.csdn.net/wuzhekai1985/article/details/6667467

建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(DP)。《大话设计模式》举了一个很好的例子——建造小人,一共需建造6个部分,头部、身体、左右手、左右脚。与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。建造小人就是在控制下一步步构造出来的。创建者模式可以能更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。下面给出建造者模式的UML图,以建造小人为实例。

对于客户来说,只需知道导向者就可以了,通过导向者,客户就能构造复杂的对象,而不需要知道具体的构造过程。下面给出小人例子的代码实现。

#include <iostream>
using namespace std;

class Builder
{
    public:
        virtual void BuildHead() {}
        virtual void BuildBody() {}
        virtual void BuildLeftArm(){}
        virtual void BuildRightArm() {}
        virtual void BuildLeftLeg() {}
        virtual void BuildRightLeg() {}
};
//build the thin person
class ThinBuilder : public Builder
{
    public:
        void BuildHead() { cout<<"build thin body"<<endl; }
        void BuildBody() { cout<<"build thin head"<<endl; }
        void BuildLeftArm() { cout<<"build thin leftarm"<<endl; }
        void BuildRightArm() { cout<<"build thin rightarm"<<endl; }
        void BuildLeftLeg() { cout<<"build thin leftleg"<<endl; }
        void BuildRightLeg() { cout<<"build thin rightleg"<<endl; }
};
//build the fat person
class FatBuilder : public Builder
{
    public:
        void BuildHead() { cout<<"build fat body"<<endl; }
        void BuildBody() { cout<<"build fat head"<<endl; }
        void BuildLeftArm() { cout<<"build fat leftarm"<<endl; }
        void BuildRightArm() { cout<<"build fat rightarm"<<endl; }
        void BuildLeftLeg() { cout<<"build fat leftleg"<<endl; }
        void BuildRightLeg() { cout<<"build fat rightleg"<<endl; }
};
// direcotr to build person
class Director
{
    private:
        Builder *m_pBuilder;
    public:
        Director(Builder *builder) { m_pBuilder = builder; }
        void Create(){
            m_pBuilder->BuildHead();
            m_pBuilder->BuildBody();
            m_pBuilder->BuildLeftArm();
            m_pBuilder->BuildRightArm();
            m_pBuilder->BuildLeftLeg();
            m_pBuilder->BuildRightLeg();
        }
};

int main()
{
    FatBuilder thin;
    Director director(&thin);
    director.Create();
    return 0;
}

GoF 在《设计模式》一书中给出的关于 Builder 模式的意图是非常容易理解、间接的:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(在示例
代码中可以通过传入不同的参数实现这一点)。

Builder 模式和 AbstractFactory 模式在功能上很相似,因为都是用来创建大的复杂的对
象,它们的区别是:Builder 模式强调的是一步步创建对象,并通过相同的创建过程可以获
得不同的结果对象,一般来说 Builder 模式中对象不是直接返回的。而在 AbstractFactory 模
式中对象是直接返回的,AbstractFactory 模式强调的是为创建多个相互依赖的对象提供一个
同一的接口。

时间: 2024-10-12 20:04:19

[设计模式] 4 创建者模式 builder的相关文章

【设计模式】—— 创建者模式Builder

前言:[模式总览]——————————by xingoo 模式意图 一个对象的创建十分复杂,为了区分构建过程和使用过程,因此分开.使用一个Director类进行对象的创建,Builder规定了这个创建过程. 模式结构 Builder 抽象建造者接口,规范各个组成部分的构建. ConcreteBuilder 具体建造者角色,实现组成部分的构建,并提供示例. Product 产品角色,创建返回的对象. Director 导演者角色,负责创建以及使用. 使用场景 1 当创建对象复杂并且与其使用过程独立

C#设计模式之五创建者模式(Builder)【创建型】

一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一个复杂的物品,它主要是由CPU.主板.硬盘.显卡.机箱等组装而成的.手机当然也是复杂物品,由主板,各种芯片,RAM 和ROM  摄像头之类的东西组成.但是无论是电脑还是手机,他们的组装过程是固定的,就拿手机来说,组装流水线是固定的,不变的,但是把不同的主板和其他组件组装在一起就会生产出不同型号的手机.那么在软件系统中是不是也会存在这样的对象

设计模式学习总结(五)创建者模式(Builder)

创建者模式,主要针对某些产品有类似的生产步骤,且有需要有先后顺序的进行各个部件的生成. 一.示例展示: 通过学习及总结,以下是我完成的创建者模式的示例: 1.创建产品类:Laptop public class Laptop { ArrayList LaptopParts = new ArrayList(); public void AddParts(string PartName) { LaptopParts.Add(PartName); } public void ShowPartList()

五分钟一个设计模式之创建者模式

五分钟一个设计模式,用最简单的方法来描述设计模式. 认识创建者模式 创建者模式(又叫生成器模式)是为创建一个产品而生的,这个产品的组装算法是确定的,但零部件可以分配给多个厂商生产.使用创建者模式来创建产品,可以把产品零部件的生产和组装分开了. 创建者模式包含以下几个部分: 产品(Product) 厂商的接口(Builder) 具体的厂商(ConcreteBuilder1.ConcreteBuilder2.-ConcreteBuilderN),实现厂商接口,负责产品零部件的生产工作 指导者(Dir

Java 设计模式:创建者模式

1.什么是创建者模式 创建者模式(Builder)是将一个复杂的对象的构建和他的表示分离,使得同样的构建过程可以创建不同的表示.比如就建造房子为例,现实生活中房子的样子是各种各样的,而且每座房子内的格局.大小等等都不一样,但是建造房子的流程基本都是一样的.创建者模式就是创建的流程保持不变,但是流程中每一步的细节是可以变化的,从而创建出不同的产品. 创建者模式中包括以下几个角色 (1).Builder 抽象建造者类,规定了产品的各个组成部分,并声明获取建造完成后产品的抽象方法. (2).Concr

Java设计模式之创建者模式,分享热爱编程的程序人生

PS:今天的23中设计模式中的创建者方式,至此告一段落.我今天带来的技术分享为创建者模式以及原型模式.当然在Java中这两种方式很常见,只不过我们写的次数确实有点低而已,但是这不是我不学它的借口!!! 创建者模式 无构建者模式代码示例:需求创建一个摩托车对象 并且使其开始运行. 发动机代码构建: 发动机代码构键 车架代码实例: 车架代码实例 轮胎机代码示例: 轮胎机代码示 摩托车对象实体类: 摩托车对象实体类 测试类: 测试类 总结:摩托车对象时一个大对象:构建过程中可能需要很多其他对象的使用,

创建者模式Builder

创建者模式: 分离对象子组件的单独构造(由Builder来负责)和装配(由Director负责),对象的构造比较复杂时使用 该模式. 优点: 由于实现了构建和装配的解耦.不同的构建器,相同的装配也可以做成不同的对象,相同的构建器,不同的装配顺序也可以生产成不同的对象.也就是实现了构造算法和装配算法的解耦,实现了更好的复用. 应用场景: StringBuilder类的append方法. SQL中的PreparedStatement JDOM中,DomBuilder SAXBuilder 创建者模式

设计模式05_创建者模式

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/46489147 创建者模式:将一个复杂对象的构建和其表示分离开来,使得同样的构建过程可以创建出不同的表示. 例如我们需要盖一栋楼房,需要工人来砌墙,需要设计师来设计房子怎么盖,而这里的设计师本身是不干活的,它只是负责下命令让工人干活就行,而真正的创建者是工人,他们最后把楼房盖起来的.所以,最后是向民工要房子而不是向设计师要房子.在这里,房主(客户端)只需要请

设计模式之建造者模式——Builder

一.概述 Builder模式,中文名为建造者模式,又名生成器模式.构建者模式等,是创建型设计模式之一.用于将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 1.适用性: 对象的创建比较复杂.有多种创建形式时 创建复杂对象的算法与对象内部组成和装配是相对独立的 2.UML类图 Builder:定义创建Product各个部件的抽象接口 ConcreteBuilder:继承自Builder,实现创建具体类型的Product所有部件的接口,并提供一个获取最终产品的接口. Dir