构造者模式。外部场景如果需要一个汽车类,它不需要关心如何构造,它只需要告诉Director需要什么,就可以从Director获得。

如:CDirector(IBuilder* aBuilder);

场景告诉Director它需要用什么类型的Builder来构造,然后就可以用Create()获得所创建的对象。

具体的构造由具体的Builder负责,当我们想变换创建方法时,变换传递的Builder实例就可以了。

C++示例

IBuilder.h

 #pragma once
#include <string>
using namespace std; class IBuilder
{
public:
IBuilder(void);
~IBuilder(void);
public:
virtual void BuildA(const string& str)=;
virtual void BuildB(const string& str)=;
};

IBuilder.cpp

 #include "IBuilder.h"

 IBuilder::IBuilder(void)
{
} IBuilder::~IBuilder(void)
{
}

Builder.h

 #pragma once
#include "ibuilder.h" class CBuilder :
public IBuilder
{
public:
CBuilder(void);
~CBuilder(void);
public:
void BuildA(const string& str);
void BuildB(const string& str);
};

Builder.cpp

 #include "Builder.h"
#include <iostream> CBuilder::CBuilder(void)
{
} CBuilder::~CBuilder(void)
{
} void CBuilder::BuildA(const string& str)
{
std::cout<<"A:"<<str<<std::endl;
} void CBuilder::BuildB(const string& str)
{
std::cout<<"B:"<<str<<std::endl;
}

Director.h

 #pragma once
#include "IBuilder.h" class CDirector
{
public:
CDirector(IBuilder* aBuilder);
~CDirector(void);
public:
void Construct();
private:
IBuilder* mBuilder;
};

Director.cpp

 #include "Director.h"

 CDirector::CDirector(IBuilder* aBuilder)
{
this->mBuilder = aBuilder;
} CDirector::~CDirector(void)
{
delete mBuilder;
} void CDirector::Construct()
{
this->mBuilder->BuildA("test");
this->mBuilder->BuildB("hello");
}

main.cpp

 #include <iostream>
#include "Director.h"
#include "Builder.h" int main()
{
CDirector* pDirector = new CDirector(new CBuilder());
pDirector->Construct();
return ;
}

Tip:示例代码中没有使用Product。

学习笔记——建造者模式Builder的更多相关文章

  1. C#学习笔记-建造者模式

    题目:用程序画一个小人. 实现: public partial class Form1 : Form { public Form1() { InitializeComponent(); } priva ...

  2. Java-马士兵设计模式学习笔记-建造者模式

    一.概述 二.代码 1.Animal.java public interface Animal { public void bark(); } 2.Dog.java public class Dog ...

  3. 设计模式学习之建造者模式(Builder,创建型模式)(6)

    假如我们需要建造一个房子,并且我们也不知道如何去建造房子,所以就去找别人帮我们造房子 第一步: 新建一个房子类House,里面有房子该有的属性,我们去找房子建造者接口HouseBuilder,我们要建 ...

  4. 【设计模式】建造者模式 Builder Pattern

    前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...

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

    建造者模式(Builder)--从组装电脑开始 建造者模式概括起来就是将不同独立的组件按照一定的条件组合起来构成一个相对业务完整的对象.调用者无需知道构造的过程. 我们从组装电脑开始 让我们从买组装电 ...

  6. 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  7. 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...

  8. 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)

    原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...

  9. 建造者模式(Builder)-宏观的使用角度

    建造者模式(Builder) 建造者模式是用来解决产品对象的创建过程是由多个零件组成的情况,这些零件与产品本身是组合关系,也就是部分与整体,这些零件的创建顺序,还有一些创建中的逻辑,都是稳定的,可以封 ...

随机推荐

  1. MFC HTTP

    CInternetSession m_winet(NULL,,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,); CHttpConnection *pConnection; ...

  2. onmousedown活用之鼠标拖动

    这个布局蛮简单的就是一个div块,通过定位,固定位置 <html> <head> <meta charset="UTF-8"> <titl ...

  3. photoshop的页面制作练习1

  4. 简析TCP的三次握手与四次分手【转】

    转自 简析TCP的三次握手与四次分手 | 果冻想http://www.jellythink.com/archives/705 TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文 ...

  5. 线程池Executors探究

    线程池用到的类在java.util.concurrent包下,核心类是Executors,通过其不同的几个方法可产生不同的线程池. 1.生成固定大小的线程池 public static Executo ...

  6. C# WebRequest简单调用WebService方法

    //get string res = GetStringByUrl("http://你的地址/WebService.asmx/方法名?参数=1"); //post string r ...

  7. pig、hive以及hbase的作用

    Pig Pig是一种数据流语言,用来快速轻松的处理巨大的数据.Pig包含两个部分:Pig Interface,Pig Latin.Pig可以非常方便的处理HDFS和HBase的数据,和Hive一样,P ...

  8. git 免密码提交代码

    Linux或者Mac下方法: 创建文件,进入文件,输入内容: cd ~ touch .git-credentials vim .git-credentials https://{username}:{ ...

  9. linux的pvtrace环境配置

    1.查看当前ubuntu版本号 froid@ubuntu:~/Desktop$ lsb_release -aNo LSB modules are available.Distributor ID:   ...

  10. Linux 格式化分区 报错Could not stat --- No such file or directory 和 partprobe 命令

    分区的过程正常: [root@db1 /]# fdisk -l   Disk /dev/sda: 21.4 GB, 21474836480 bytes 255 heads, 63 sectors/tr ...