`
isiqi
  • 浏览: 16489886 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

设计模式之建造者模式(生成器模式)(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;

}

分享到:
评论

相关推荐

    生成器模式builder

    Builder模式属于创建型设计模式,它的核心思想是将对象的创建过程与对象本身分离,使得同样的构建过程可以创建不同的表示。 在Java或其他面向对象语言中,生成器模式通常包括四个主要角色:产品(Product)、建造者...

    C#面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式)

    Builder模式是一种创建型设计模式,它提供了一种创建对象的抽象接口,并允许使用不同的实现来控制对象的构造过程。在C#中,Builder模式经常被用于复杂对象的构建,特别是当构建过程需要多个步骤或者需要在不同环境中...

    Java设计模式-建造者模式详解

    生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。当我们使用Builder的时候,一般来说,是因为创建这个对象的步骤比较多,每个步骤都需要一个零部件,最终组合成一个完整的对象。 Builder...

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

    Builder生成器模式,又称建造者模式,可以把一个复杂的对象,分步骤创建。在软件开发中,Builder模式主要用于解决一些复杂对象的创建问题,通过一步步的方式来创建对象,避免了直接使用构造函数创建对象的局限性。 ...

    C#视频-面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式)

    Builder模式是一种创建型设计模式,它提供了一种...在观看“C#视频-面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式)”的视频教程时,可以深入理解Builder模式的工作原理,学习如何在实际项目中有效应用。

    C#面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式) (Level 300)

    Builder模式是一种创建型设计模式,它提供了一种创建对象的抽象接口,并允许使用不同的实现来创建复杂的对象。在C#中,Builder模式可以帮助我们在不暴露复杂构造过程的情况下,创建具有多种构建步骤的对象。这种模式...

    晨会分享Builder设计模式

    Builder设计模式是一种软件设计模式,它属于创建型模式,主要用于对象的复杂构建过程。这种模式将对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。Builder模式的核心在于提供一个构建器接口,该接口...

    【设计模式】- 生成器模式(Builder)(csdn)————程序.pdf

    生成器模式,也称为建造者模式,是一种设计模式,用于创建复杂对象,它允许你按照一系列步骤来构造对象,而这些步骤可以通过不同的实现来产生不同形式的对象。生成器模式的核心在于分离了对象的构造过程和表示细节,...

    Java设计模式之创建型模式源码以及文档

    在"Java设计模式之创建型模式源码以及文档"中,你将找到这些模式的具体实现,包括源码和相关文档。通过阅读源码,你可以深入理解每种模式的内部工作机制,而文档则会提供理论背景和应用场景的解释,帮助你更好地运用...

    设计模式 - 建造模式(C++实例)

    建造模式(Builder Pattern)是一种创建型设计模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式常用于当构造过程需要步骤化,并且每个步骤可能有多种实现时,比如在软件工程...

    生成器模式源代码

    生成器模式,也被称为构建器模式,是一种软件设计模式,主要用在对象的创建过程中,它将复杂的构建过程分解为一系列简单的步骤,使得构建过程可配置,并且可以独立于对象的表示进行。在C#中,生成器模式的实现通常...

    java生成器模式

    生成器模式(Builder Pattern)是Java设计模式中的创建型模式之一,主要解决复杂对象的构建问题,通过将构造过程逐步分解,使得构造过程与表示分离,使得同样的构建过程可以创建不同的表示。这种模式通常用于创建...

    java模式,设计模式,多种设计模式

    - **建造者模式**(Builder Pattern):将一个复杂对象的构建过程与其表示分离,使得类可以根据不同情况表现出不同的行为。 - **原型模式**(Prototype Pattern):通过复制一个现有的实例来创建新的实例。 - **单例...

    建造者(生成器)模式C++、Java实现

    建造者(生成器)模式是一种行为设计模式,它允许我们分步骤构建复杂对象,而无需暴露构造过程。这种模式在创建具有多种配置选项的对象时特别有用,因为它将对象的构造与表示分离,使得构建和表示的过程可以独立进行...

    C#设计模式PDF 电子书

    工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。C#中的 Activator.CreateInstance() 方法可以作为简单工厂的实现,而更复杂的抽象工厂模式则用于创建相关的对象家族。 ...

    生成器模式

    生成器模式是一种设计模式,属于创建型模式,它在软件工程中被广泛应用于解决大量对象的创建问题。这种模式的主要思想是将对象的创建过程分解为一系列步骤,使得客户端可以根据需要选择执行这些步骤,从而实现延迟...

    23种java设计模式.pdf

    创建模式是指在创建对象时使用的模式,包括 Factory(工厂模式)、Singleton(单例模式)、Builder(建造者模式)、Prototype(原型模式)等。这些模式都是为了解决对象创建的问题,使得对象的创建更加灵活和可扩展...

    设计模式 让你轻松理解设计模式,提高开发效率

    从创建型模式(如工厂模式、建造者模式)到结构型模式(如适配器模式、组合模式),再到行为型模式(如观察者模式、策略模式),每种模式都有其独特的应用场景和优点。掌握这些设计模式不仅有助于我们编写出更高质量...

    Java设计模式刘伟书本中模拟考试答案

    7. 简单工厂(Simple Factory)、建造者(Builder)、外观(Facade)、享元(Flyweight)、职责链(Chain of Responsibility)、解释器(Interpreter)、状态(State)、访问者(Visitor)模式等: 这些模式都是在...

Global site tag (gtag.js) - Google Analytics