附一个编译当前目录下所有CPP文件的MakeFile

  • 生成器模式

    • 产品设计
    • 生产
    • 分配

生成器模式


生成器模式(Builder)不同于工厂模式(Factory):
生成器模式是通过一个生成器(Builder)生产出不同类型的产品,即通过设计出一个产品的每个部件(Builder的具体实现,如Dell_Builder),经过生产(Product)和组装(Director)成一个完整的产品,新增产品只需要新建一个设计图(实现类)

和大部分生成器模式不一样的地方是:
这里没有采用纯虚函数,原因是不想让Biulder成为一个固定的生成器,因为抽象类的函数在可实例化的子类中是必须全部实现的.
不采用纯虚函数的优点:实现类可以实现部分函数,更加灵活.功能更加强大
eg:
-不用纯虚函数的生成器是一个3D打印机,可以打印出很多东西.
-用纯虚函数的生成器是一个2D打印机,只能打印出文本和图片

Builder.h

#pragma onceclass Builder
{
public:Builder(){   }   virtual ~Builder(){}virtual void Build_monitor(const char* str="default_monitor"){}   virtual void Build_Cpu(const char* str="default_cpu"){   }   virtual void Build_Memory(const char* str="default_memory"){   }   };

产品设计

可以设计很多个产品,但这里示例就只写一个了

Dell_Builder.h

#pragma once
#include "Builder.h"
#include "Product.h"
#include <iostream>
using namespace std;
class Dell_Builder: public Builder
{
public:Dell_Builder(){   cout<<"Dell is creating...."<<endl;}   void Build_monitor(const char* str = "") {   dell->monitor("BenQ");}   void Build_Cpu(const char* str = "") {   dell->cpu("Intel x86 I7-7700HQ");}   void Build_Memory(const char* str = "") {   dell->memory("Samsung DDR4 8G");}   Product* Get_Product(){   return dell;}
private:Product* dell;
};

生产

Product.h

#pragma once
#include <iostream>
using namespace std;class Product
{
public:void monitor(const char* str){   cout<<"monitor is \t"<<str<<endl;}   void cpu(const char* str){   cout<<"cpu is \t"<<str<<endl;}   void memory(const char* str){   cout<<"memory is\t"<<str<<endl;}
private:char* str;
};

分配

Director.h

#pragma once
#include <iostream>
#include "Builder.h"
using namespace std;class Director
{
public:void construct(Builder* b){   b->Build_monitor();                                                                                                                                   b->Build_Cpu();b->Build_Memory();cout<<"install computer is finished."<<endl;}
};

TestBuilder.cpp

#include <iostream>
#include "Builder.h"
#include "Dell_Builder.h"
#include "Product.h"
#include "Director.h"
using namespace std;int main()
{Builder* builder = new Dell_Builder();Director dir;dir.construct(builder);Dell_Builder *dell = (Dell_Builder *)builder;auto fewa = dell->Get_Product();std::cout << fewa<<endl;                                                                                                                                  return 0;
}

C++代码实现 生成器模式相关推荐

  1. 设计模式之建造者模式(生成器模式、Builder)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  2. [原译]理解并实现生成器模式

    介绍 本文讨论生成器设计模式,讨论该模式什么情况下使用,怎么实现.并且.最后会有一个简单的生成器模式的实现. 背景 当我们的程序需要创建一个对象.而这个对象必须由很多不同的对象来构造的时候.为了构造最 ...

  3. 生成器模式(Builder)解析例子

    生成器模式属于对象结构型模式,其意图是将一个复杂对象的构建与他的表示分离,使得同样的构建创建过程可以创建不同的表示. 适用性: 1.         当创建复杂对象的算法应该独立于该对象的组成部分以及 ...

  4. 设计模式--Builder生成器模式

    GOF<设计模式>中说道:将一个复杂对象的构建与其表示向分离,使得同样的构建过程可以创建不同的表示.    所谓"复杂对象",是指:此对象中还含有其它的子对象.    ...

  5. 【设计模式】单例模式-生成器模式-原型模式

    前面的几种工厂模式,主要用于选择实现,这里的三种模式:单例模式.生成器模式.原型模式,主要用于生成对象,在GoF的划分中,这是创建型的五种模式(不包括简单工厂,前面提到过,这不是一个标准意义上的设计模 ...

  6. 设计模式(4)建造者模式/生成器模式(Builder)

    设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...

  7. 发布CodeBuild.Net代码自动生成器 V2008 2.01(Vs2008)和架构实例源码Demo

    CodeBuild.Net代码自动生成器 V2008 2.01(Vs2008) Microsoft Visual Studio 2008开发,需要安装运行库. 支持生成多标签切换等功能,方便代码生成, ...

  8. Builder生成器模式

    这次来学习另一个创建型设计模式:Builder生成器模式. GOF对Builder模式的定义 (1)意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. (2)适用性 1. ...

  9. 建造者模式 生成器模式 创建型 设计模式(五)

    建造者模式 Builder 也叫做生成器模式 在正式开始建造者模式之前,先回顾下抽象工厂模式 本人的所有系列文章都是自己学习的记录过程,均有比较严格的先后顺序,如果不清楚抽象工厂模式可以先往前翻翻 从 ...

  10. 设计模式-生成器模式

    1.问题描述 生活场景:你玩过种地.种花等类似的游戏吗?这是最近很流行的游戏哟!下面就是从种花游戏中剪切的四个花盆(盆景),很漂亮吧!你将不同的种子放入花盆,一段时间后你就可以看到各种美丽的鲜花了,不 ...

最新文章

  1. IDEA : Git Pull Failed 解决(IDEA中使用stash功能)
  2. 成都Uber优步司机奖励政策(1月9日)
  3. 爬过这 6 个坡,你就能对 Linux 操作系统了如指掌
  4. android listview 自动循环滚动条,ListView的自动循环滚动显示【原创】
  5. Spring+SpringMVC+MyBatis+easyUI整合基础篇(四)代码简化
  6. NumPy之:多维数组中的线性代数
  7. linux修改隐藏文件生效,在Linux传统文件系统下隐藏属性的修改-linux修改文件名...
  8. 达尔文进化奖_使用Kydavra GeneticAlgorithmSelector将达尔文进化应用于特征选择
  9. 洛谷【数据结构1-1】线性表
  10. comsol入门闲聊
  11. 10天竟然只写了一行代码,谁的锅?
  12. 网易云音乐在 Ubuntu 下缩放的问题
  13. Linux 网桥代码分析 六 网桥数据转发函数分析
  14. [IJKPLAYER]编译与DEMO运行
  15. 怎么把照片变年轻?这两个照片变年轻小妙招教给你
  16. HTML高德地图标注,文本标记-点标记-示例中心-JS API 示例 | 高德地图API
  17. 我的世界java版红石电梯_《我的世界》红石电梯建造教程
  18. ettercap dns欺骗
  19. 微信小程序:小程序开发测试时候使用http请求
  20. 计算机硬件各部件的名称 功能参数,计算机基础知识教程-硬件.ppt

热门文章

  1. 关闭TOMCAT日志的三个方法
  2. 国资入局,苏宁“零售服务商”升级战略获得最强助力
  3. python aiml开发文档_Python AIML搭建聊天机器人
  4. Aiml中文包含英文(字母,特殊符号)识别问题的解决
  5. 基于Matpower的电力系统潮流计算仿真
  6. 【回眸】LDA算法(数据处理与智能决策)
  7. iOS 录音,播放并上传
  8. 【3D点云】数据入门(持续更新)
  9. win10多合一原版系统_如何制作Win10多合一系统安装盘
  10. windows 搭建kms服务器激活_自建KMS激活服务器的技巧