`

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

阅读更多

Builder模式解决这样的问题:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要把复杂对象的创建过程和这个对象的表示分离出来,这样做的好处就是通过一步步的进行复杂对象的创建,由于在每一步的构造过程中可以引入参数,使得结果相同步骤创建最后得到的对象的展示不一样.

例如汽车的生产过程:

Builder模式中:

1.离合器工厂生产离合器产品,得到汽车部件A.

2.轮胎工厂生产轮子产品,得到汽车部件B.

3.车声工厂生产车声产品,得到汽车部件C.

4.将这些部件放到一起,形成刚好能够组装成一辆汽车的整体.

5.将这个整体送到汽车组装工厂,得到一个产品汽车.

Factor模式中:

1.有一个抽象的工厂.

2.实现一个具体的工厂----汽车工厂.

3.工厂生产汽车A,得到汽车产品A.

4.工厂生产汽车B,得到汽车产品B.

二者不同在于:

Factor模式不考虑对象的组装过程,而是直接生成一个我想要的对象.

Builder模式先一个个的创建每一个部件,再统一组装成一个对象.

Factor模式所解决的问题是,工厂生产产品.而Builder模式所解决的问题是工厂控制产品生成器组装各个部件的过程,然后从产品生成器中得到产品.

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

------------------------------------------Builder.h-----------------------------------------------------

#ifndef BUILDER_H_

#define BUILDER_H_

//虚拟基类,是所有Builder的基类,提供不同部分的构建接口函数

class Builder

{

public:

Builder()

{};

virtual ~Builder()

{}

//纯虚函数,提供构建不同部分的构建接口函数

virtual void BuilderPartA() = 0;

virtual void BuilderPartB() = 0;

};

//使用Builder构建产品,构建产品的过程都一致,当时不同的Builder有不同的实现

//这个不同的实现通过不同的Builder派生类来实现,存有一个Builder的指针,通过这个来实现多太调用

class Director

{

public:

Director(Builder * pBuilder);

~Director();

void Construct();

private:

Builder *m_pBuilder;

}

//Builder的派生类,实现BuilderPartA和BuilderPartB接口函数

class ConcreteBuilder1:public B uilder

{

public:

ConcreteBuilder1()

{}

virtual ~ConcreteBuilder1()

{}

virtual void BuilderPartA();

virtual void BuilderPartB();

};

//Builder的派生类,实现BuilderPartA和BuilderPartB接口函数

class ConcreteBuilder2:public Builder

{

public:

ConcreteBuilder2()

{}

virtual ~ConcreteBuilder2()

{}

virtual void BuilderPartA();

virtual void BuilderPartB();

};

#endif

------------------------------------Builder.cpp-----------------------------------

#include "Builder.h"

#include <iostream>

void ConcreteBuilder1::BuilderPartA()

{

std::cout <<"BuilderPartA by ConcreteBuilder1"<<endl;

}

void ConcreteBuilder1::BuilderPartB()

{

std::cout<<"BuilderPartB by ConcreteBuilder1"<<endl;

}

void ConcreteBuilder2::BuilderPartA

{

std::cout<<"BuilderPartA by ConcreteBuilder2"<<endl;

}

void ConcreteBuilder2::BuilderPartB

{

std::cout<<"BuilderPartB by ConcreteBuilder2"<<endl;

}

Director::Direcotr(Builder *pBuilder):m_pBuilder(pBuilder)

{}

Direcotr::~Director()

{

delete m_pBuilder;

m_pBuilder = NULL;

}

//Construct函数表示一个对象的整个构造过程,不同的部分之间的装配方式都是一致的

void Direcotr::Construct()

{

m_pBuilder->BuilderPartA();

m_PBuilder->BuilderPartB();

}

-------------------------------------main.cpp-------------------------

#include "Builder.h"

#include<stdlib.h>

int main()

{

Builder *pBuilder1 = new ConcreteBuilder1;

Direcotr *pDictor1 = new Director(pBuilder1);

pDirector1->Construct();

Builder *pBuilder2 = new ConcreteBuilder2;

Director *pDirector2 = new Director(pBuilder2);

pDirecotr2->Construct();

delete pDirector1;

delete pDirector2;

return 0;

}

分享到:
评论

相关推荐

    PHP设计模式之建造者模式(Builder)原理与用法案例详解

    这个建造者模式,我们也可以称为生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式,简单点来说就是为了消除其它对象复杂的创建过程...

    设计模式 GOF 23

    3.2 Builder(生成器)—对象创建型 模式 63 3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89...

    生成器模式例子

    在《Head First Design Patterns》文中是这么介绍生成器模式的,“封装一个产品的构造过程,并允许按步骤构造”,感觉说得不是很清楚。而在网上查找相关资料是这么解释的,建造者...这种类型的设计模式属于创建型模式。

    设计模式:可复用面向对象软件的基础--详细书签版

    3.2 builder(生成器)—对象创建型 模式 63 3.3 factory method(工厂方法)— 对象创建型模式 70 3.4 prototype(原型)—对象创建型 模式 87 3.5 singleton(单件)—对象创建型 模式 84 3.6 创建型模式...

    设计模式之建造者模式理解

    建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。可以将复杂对象的构建和它的表示分离,使同样的构建过程产生不同的表示 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象...

    .NET设计模式(4):建造者模式(BuilderPattern)

    在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的... 生成器模式将复杂对象的构建与对象的表现分离开来,这样使得同样的构建过程可以创建出不同的表现。这种模式用于快餐店

    C#23种设计模式_示例源代码及PDF

    结构型模式 6、ADAPTER —在朋友聚会上碰到了一个美女 Sarah,从香港来的,可我不会说粤语,她不 、 会说普通话,只好求助于我的朋友 kent 了,他作为我和 Sarah 之间的 Adapter,让我和 Sarah 可以相互交谈了(也...

    深入浅出设计模式(中文版)

    第3章GoF-CreationalDesignPatterns创建型设计模式 23 3.1SimpleFactoryPattern(简单工厂模式) 24 3.1.1定义 24 3.1.2现实例子——国旗生产厂 26 3.1.3C#实例1——电子付款系统 26 3.1.4C#实例2——学校登录...

    深入理解Android中的建造者模式

    前言 在Android开发过程中,我发现很多安卓...建造者模式(Builder Pattern)也叫生成器模式,其定义如下: separate the construction of a complex object from its representation so that the same construction p

    C#设计模式之Builder生成器模式解决带老婆配置电脑问题实例

    本文实例讲述了C#设计模式之Builder生成器模式解决带老婆配置电脑问题。分享给大家供大家参考,具体如下: 一、理论定义 生成器模式 又叫:建造者模式,它 可以 把一个 复杂的对象,分步骤创建。 二、应用举例 需求...

    深入浅出设计模式(中文版电子版)

    第3章GoF-CreationalDesignPatterns创建型设计模式 23 3.1SimpleFactoryPattern(简单工厂模式) 24 3.1.1定义 24 3.1.2现实例子——国旗生产厂 26 3.1.3C#实例1——电子付款系统 26 3.1.4C#实例2——学校登录...

    BuilderPattern:建造者设计模式的例子

    这种设计模式属于创建模式,因为该模式提供了创建对象的最佳方法之一。 Builder类逐步构建最终对象。 该构建器独立于其他对象。 执行 我们考虑了一家快餐店的商业案例,其中典型的一餐可能是汉堡和冷饮。 汉堡可以...

    GoF 的 23 种设计模式

    建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。 代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地...

    源码:阎宏设计模式光盘

    com.javapatterns.builder 建造者模式 com.javapatterns.carp 组合/聚合复用原则 com.javapatterns.chainofresp 责任链模式 com.javapatterns.chainofresp.scheduler 专题:定时器与击鼓传花 ...

    builder-builder:在 node、io 或浏览器中使用的运行时构建器生成器

    在节点、io 或浏览器中使用的运行时构建器生成器。 安装和兼容性 Builder Builder 可以在服务器端与 Node.JS 和 IO.JS 一起使用,也可以在浏览器中使用。 不需要库、助手或框架——它被设计为轻量级和可移植的。 ...

    asp.net知识库

    关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory...

    JAVA与模式

    单例模式与MX记录 com.javapatterns.multilingual 专题:多例模式与多语言支持 com.javapatterns.keygen 专题:序列键生成器与单例及多例模式 com.javapatterns.builder 建造者模式 ...

    FileFinder2:在Java 8平台上使用查找程序设计模式样本

    使用设计模式创建了与相同主题的项目。 该项目对于给出的家庭作业参考没有用。 请参阅“文件的程序片段。如果您参考该项目的源代码,则该团队的作业将被视为未提交。 使用以下设计模式。 生成器模式。 单例模式。 ...

Global site tag (gtag.js) - Google Analytics