构造者模式。外部场景如果需要一个汽车类,它不需要关心如何构造,它只需要告诉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. css3制作字体

    代码教程 HTML代码用H1吧,这样语义化好些,因为标题一般用h1-h6. <h1 class="vintage">美丽的中国语</h1> 纯CSS制作的复 ...

  2. Openjudge-计算概论(A)-角谷猜想

    描述: 所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1.如,假定初始整数为5,计算过程分别为16.8.4.2.1 ...

  3. Block使用中的一些要注意的地方

    本文主要是阐述一下Block中如何的使用外部变量以及block本身的内存管理. 先定义一个block变量,作为后续的例子中使用: typedef void(^BlockCC)(void); Block ...

  4. redis高级实用特性(1)

    1.安全性 2.主从复制 3.事务处理 4.持久化机制 5.发布订阅消息 6.虚拟内存的使用 安全性:设置客户端连接后进行任何其他指定前需要使用的密码 警告:因为redis速度相当快,所以在一台比较好 ...

  5. java集合概念

    Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率 ...

  6. 第一次点击button, view视图出现;第二次点击button,view视图消失

    主要思想:点击一下按钮选中Yes,View出现,再点击一下选中为No  view消失

  7. POJ 3416 Crossing

    树状数组+离线操作 #include<stdio.h> #include<string.h> #include<math.h> #include<algori ...

  8. Windows如何压缩tar.gz格式

    Windows如何压缩tar.gz格式 tar.gz 是linux和unix下面比较常用的格式,几个命令就可以把文件压缩打包成tar.gz格式 然而这种格式在windows并不多见,WinRAR.Wi ...

  9. 批处理 取得当前路径 %CD%

    在DOS的批处理中,有时候需要知道当前的路径.在DOS中,有两个环境变量可以跟当前路径有关,一个是%cd%, 一个是%~dp0. 这两个变量的用法和代表的内容一般是不同的. 1. %cd% 可以用在批 ...

  10. ShellExecute, WinExec, CreateProcess区别

    ShellExecute ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件.打开一个目录.打印一个文件等等),并对外部程序有一定的控制. 有几个API函数都可以实现这些功能 ...