#pragma once#ifndef BUILDER_H
#define BUILDER_H #include <memory>
using namespace std;
// 虚拟基类,是所有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: auto_ptr<Builder> m_pBuilder;
}; // Builder的派生类,实现BuilderPartA和BuilderPartB接口函数
class ConcreateBuilder1:public Builder
{
public: ConcreateBuilder1(){} virtual ~ConcreateBuilder1(){} virtual void BuilderPartA(); virtual void BuilderPartB();
}; // Builder的派生类,实现BuilderPartA和BuilderPartB接口函数
class  ConcreateBuilder2:public  Builder
{
public: ConcreateBuilder2(){} virtual ~ConcreateBuilder2(){} virtual void BuilderPartA(); virtual void BuilderPartB();
}; #endif
#include "StdAfx.h"
#include "builder_impl.h"#include <iostream>
using namespace std;
void  ConcreateBuilder1::BuilderPartA()
{ std::cout<<" BuilderPartA by ConcreateBuilder1:"<<this<<endl;
} void  ConcreateBuilder1::BuilderPartB()
{ std::cout<<" BuilderPartB by ConcreateBuilder1:"<<this<<endl;
} void  ConcreateBuilder2::BuilderPartA()
{ std::cout<<" BuilderPartA by ConcreateBuilder2:"<<this<<endl;
} void  ConcreateBuilder2::BuilderPartB()
{ std::cout<<" BuilderPartB by ConcreateBuilder2:"<<this<<endl;
} Director::Director(Builder * pBuilder)
: m_pBuilder(pBuilder)
{
} Director:: ~Director()
{
} // Construct 函数表示一个对象的整个构建过程,不同的部分之间的装配方式都是一致的,
// 首先构建PartA 其次是PartB,只是根据不同的构建者会有不同的表示
void  Director::Construct()
{ m_pBuilder -> BuilderPartA(); m_pBuilder -> BuilderPartB();
}
// Builder.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#include "builder_impl.h"
#include <stdlib.h>
#include <memory>
// 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{//构建过程一样,根据装载builder1和builder2创建不同表示auto_ptr<Director> pDirector1(new Director(new ConcreateBuilder1));pDirector1->Construct();auto_ptr<Director> pDirector2(new Director(new ConcreateBuilder2)); pDirector2->Construct();  system( " pause " ); return 0;
}

设计模式-创建型-生成器相关推荐

  1. 软考软件设计师---面向对象技术(设计模式--创建型--工厂、生成器、原型、单例)

    转载于自己博客文章: 软考软件设计师---面向对象技术(设计模式--创建型--工厂.生成器.原型.单例) - 松下之约一.创建型设计模式关注对象的创建,让一个类得到实例化过程由另一类的对象完成.分类: ...

  2. 设计模式-创建型模式-建造者模式

    设计模式-创建型模式-建造者模式 建造者模式即生成器模式,将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 代码如下 // 产品类 public class Product{pu ...

  3. 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript

    设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...

  4. 设计模式-创建型模式-模板方法

    设计模式-创建型模式-模板方法 定义一个操作中的算法框架,将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义一个算法的步骤. protected 对于本包及其子类可见. 类图 代码 代 ...

  5. 设计模式-创建型模式-工厂模式(工厂三兄弟)

    设计模式-创建型模式-工厂模式(工厂三兄弟) 工厂模式分为简单工厂,工厂方法,抽象工厂. 简单工厂模式 一个接口,三个具体类,一个工厂,通过选择,生产出对应的对象. package demo2;pub ...

  6. 设计模式(创建型)之建造者模式(Builder Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  7. 七大设计原则与设计模式(创建型模式、结构型模式、行为型模式)

    七大设计原则 开闭原则.依赖倒置原则.单一职责原则.接口隔离原则.迪米特法则(最少知道原则).里氏替换原则.合成 (组合).聚合复用原则 开闭原则 定义: 一个软件实体如类.模块和函数应该对扩展开放, ...

  8. 设计模式-创建型模式-抽象工厂模式

    工程源码:设计模式-创建型模式-抽象工厂模式https://download.csdn.net/download/qq_40788199/85544119 码云:设计模式-创建型模式-抽象工厂模式ht ...

  9. 设计模式-创建型模式-简单工厂模式

    工程地址:设计模式-简单工厂源码-C++文档类资源-CSDN下载C++设计模式-创建型模式-简单工厂模式源码更多下载资源.学习资料请访问CSDN下载频道.https://download.csdn.n ...

最新文章

  1. 线性代数 2021-2022-1 考试要点
  2. 微服务模式下,实现前后端多资源服务调用
  3. Spring加载resource时classpath*:与classpath:的区别
  4. php 显示下拉菜单,PHP在下拉列表中显示菜单树
  5. 可见性、原子性和有序性问题
  6. python何时用list,dict,set
  7. 泡沫下的破浪者,智能语音产品到底落地何处?
  8. WPF太阳、地球、月球运动轨迹模拟
  9. 极速office(excel)根据身份证号如何提取年龄
  10. 电子产品EMC不合格,如何整改?
  11. web端实现类微信的语音播放效果
  12. ai跟随路径_AI 路径寻找器(形状组合工具)-怎么使用,使用教程
  13. KeilC51基础 利用仿真测试代码的运行时间
  14. 企业的商业模式和盈利模式概述,业务流程再造
  15. NiFi用户指南文档分析(2)
  16. idea 提示Expecting newline or semicolon解决办法
  17. 数字图像处理|Matlab-数字图像编码实验-无损编码/压缩算法实验-实现行程编码压缩, 计算原图和压缩以后的尺寸,计算压缩率并比较分析
  18. Windows 11和Windows 2022 TLS/SSL(Schannel SSP)的加密套件
  19. 词云中去重复的词_手把手教你挖掘蓝海词,打造爆款标题!
  20. Java开发前景怎么样?值得学吗?

热门文章

  1. java二维数奇数组金字塔_金字塔内发现一组神奇数字 至今无解(图)
  2. android多线程的本质,[原创]分析unidbg(unidbgMutil)多线程机制
  3. C~K的班级(II)_JAVA
  4. 16.异常处理机制:exception
  5. java程序员学C#基本语法两个小时搞定(对比学习)
  6. Jekyll主题收藏
  7. Java Date 和 Calendar
  8. 日本各地方与所属各县名称及其读音
  9. C++ WINDOWS API 如何使用NMAKE和CL编译
  10. 《Effective STL》学习笔记(第一部分)