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

    一.comparator 接口继承 public class ComparatorTest { /** * @param args */ public static void main(String[ ...

  2. Python 学习笔记11

    如何要飞得高,就该把天空忘掉.如果时时想着梦想,那就寸步难行.因为会产生很强的挫败感.倾空自己的杯子,把自己放空,才能放得进去东西. 这两天一直在鼓捣要用python写一个博客出来.先是下载了一个放到 ...

  3. 使用timer定时器,防止事件重入

    首先简单介绍一下timer,这里所说的timer是指的System.Timers.timer,顾名思义,就是可以在指定的间隔是引发事件.官方介绍在这里,摘抄如下: 1 2 Timer 组件是基于服务器 ...

  4. CSS的属性

    一,可继承属性<!DOCTYPE html><html lang="en"><head> <meta charset="UTF- ...

  5. 定义django admin的站点头,标题等

    admin.py from django.contrib import admin from app.models import Product # Register your models here ...

  6. point类型·

    指针的类型 不同类型的指针,从内存需求的观点来说,没有什么不同!他们三个都需要足够的内存来繁殖一个机器地址,"指向不同类型之各指针"之间的差异,既不在其指针表示法不同,也不再其内容 ...

  7. java中list集合的内容,如何使用像数据库中group by形式那样排序

    java中list集合的内容,如何使用像数据库中group by形式那样排序,比如:有一个 List<JavaBean> 他中包含了一些如下的内容JavaBean:name    mone ...

  8. hdu_5044_Tree(树链剖分)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5044 题意:给一棵树,在点和边上操作 题解:树链剖分,剖完后用树状数组维护即可,因为只有加减操作,连树 ...

  9. JavaScript学习总结(十七)——Javascript原型链的原理

    一.JavaScript原型链 ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法.其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法.在JavaScript中, ...

  10. Mysql:输出到文件

    mysql>tee /home/a.txt mysql>show processlist; mysql>exit tee命令能重定向输出,同时屏幕会同步显示.