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模式属于创建型设计模式,它的核心思想是将对象的创建过程与对象本身分离,使得同样的构建过程可以创建不同的表示。 在Java或其他面向对象语言中,生成器模式通常包括四个主要角色:产品(Product)、建造者...
Builder模式是一种创建型设计模式,它提供了一种创建对象的抽象接口,并允许使用不同的实现来控制对象的构造过程。在C#中,Builder模式经常被用于复杂对象的构建,特别是当构建过程需要多个步骤或者需要在不同环境中...
生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。当我们使用Builder的时候,一般来说,是因为创建这个对象的步骤比较多,每个步骤都需要一个零部件,最终组合成一个完整的对象。 Builder...
Builder生成器模式,又称建造者模式,可以把一个复杂的对象,分步骤创建。在软件开发中,Builder模式主要用于解决一些复杂对象的创建问题,通过一步步的方式来创建对象,避免了直接使用构造函数创建对象的局限性。 ...
Builder模式是一种创建型设计模式,它提供了一种...在观看“C#视频-面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式)”的视频教程时,可以深入理解Builder模式的工作原理,学习如何在实际项目中有效应用。
Builder模式是一种创建型设计模式,它提供了一种创建对象的抽象接口,并允许使用不同的实现来创建复杂的对象。在C#中,Builder模式可以帮助我们在不暴露复杂构造过程的情况下,创建具有多种构建步骤的对象。这种模式...
Builder设计模式是一种软件设计模式,它属于创建型模式,主要用于对象的复杂构建过程。这种模式将对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。Builder模式的核心在于提供一个构建器接口,该接口...
生成器模式,也称为建造者模式,是一种设计模式,用于创建复杂对象,它允许你按照一系列步骤来构造对象,而这些步骤可以通过不同的实现来产生不同形式的对象。生成器模式的核心在于分离了对象的构造过程和表示细节,...
在"Java设计模式之创建型模式源码以及文档"中,你将找到这些模式的具体实现,包括源码和相关文档。通过阅读源码,你可以深入理解每种模式的内部工作机制,而文档则会提供理论背景和应用场景的解释,帮助你更好地运用...
建造模式(Builder Pattern)是一种创建型设计模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式常用于当构造过程需要步骤化,并且每个步骤可能有多种实现时,比如在软件工程...
生成器模式,也被称为构建器模式,是一种软件设计模式,主要用在对象的创建过程中,它将复杂的构建过程分解为一系列简单的步骤,使得构建过程可配置,并且可以独立于对象的表示进行。在C#中,生成器模式的实现通常...
生成器模式(Builder Pattern)是Java设计模式中的创建型模式之一,主要解决复杂对象的构建问题,通过将构造过程逐步分解,使得构造过程与表示分离,使得同样的构建过程可以创建不同的表示。这种模式通常用于创建...
- **建造者模式**(Builder Pattern):将一个复杂对象的构建过程与其表示分离,使得类可以根据不同情况表现出不同的行为。 - **原型模式**(Prototype Pattern):通过复制一个现有的实例来创建新的实例。 - **单例...
建造者(生成器)模式是一种行为设计模式,它允许我们分步骤构建复杂对象,而无需暴露构造过程。这种模式在创建具有多种配置选项的对象时特别有用,因为它将对象的构造与表示分离,使得构建和表示的过程可以独立进行...
工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。C#中的 Activator.CreateInstance() 方法可以作为简单工厂的实现,而更复杂的抽象工厂模式则用于创建相关的对象家族。 ...
生成器模式是一种设计模式,属于创建型模式,它在软件工程中被广泛应用于解决大量对象的创建问题。这种模式的主要思想是将对象的创建过程分解为一系列步骤,使得客户端可以根据需要选择执行这些步骤,从而实现延迟...
创建模式是指在创建对象时使用的模式,包括 Factory(工厂模式)、Singleton(单例模式)、Builder(建造者模式)、Prototype(原型模式)等。这些模式都是为了解决对象创建的问题,使得对象的创建更加灵活和可扩展...
从创建型模式(如工厂模式、建造者模式)到结构型模式(如适配器模式、组合模式),再到行为型模式(如观察者模式、策略模式),每种模式都有其独特的应用场景和优点。掌握这些设计模式不仅有助于我们编写出更高质量...
7. 简单工厂(Simple Factory)、建造者(Builder)、外观(Facade)、享元(Flyweight)、职责链(Chain of Responsibility)、解释器(Interpreter)、状态(State)、访问者(Visitor)模式等: 这些模式都是在...