C++代码实现 生成器模式
附一个编译当前目录下所有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++代码实现 生成器模式相关推荐
- 设计模式之建造者模式(生成器模式、Builder)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...
- [原译]理解并实现生成器模式
介绍 本文讨论生成器设计模式,讨论该模式什么情况下使用,怎么实现.并且.最后会有一个简单的生成器模式的实现. 背景 当我们的程序需要创建一个对象.而这个对象必须由很多不同的对象来构造的时候.为了构造最 ...
- 生成器模式(Builder)解析例子
生成器模式属于对象结构型模式,其意图是将一个复杂对象的构建与他的表示分离,使得同样的构建创建过程可以创建不同的表示. 适用性: 1. 当创建复杂对象的算法应该独立于该对象的组成部分以及 ...
- 设计模式--Builder生成器模式
GOF<设计模式>中说道:将一个复杂对象的构建与其表示向分离,使得同样的构建过程可以创建不同的表示. 所谓"复杂对象",是指:此对象中还含有其它的子对象. ...
- 【设计模式】单例模式-生成器模式-原型模式
前面的几种工厂模式,主要用于选择实现,这里的三种模式:单例模式.生成器模式.原型模式,主要用于生成对象,在GoF的划分中,这是创建型的五种模式(不包括简单工厂,前面提到过,这不是一个标准意义上的设计模 ...
- 设计模式(4)建造者模式/生成器模式(Builder)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...
- 发布CodeBuild.Net代码自动生成器 V2008 2.01(Vs2008)和架构实例源码Demo
CodeBuild.Net代码自动生成器 V2008 2.01(Vs2008) Microsoft Visual Studio 2008开发,需要安装运行库. 支持生成多标签切换等功能,方便代码生成, ...
- Builder生成器模式
这次来学习另一个创建型设计模式:Builder生成器模式. GOF对Builder模式的定义 (1)意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. (2)适用性 1. ...
- 建造者模式 生成器模式 创建型 设计模式(五)
建造者模式 Builder 也叫做生成器模式 在正式开始建造者模式之前,先回顾下抽象工厂模式 本人的所有系列文章都是自己学习的记录过程,均有比较严格的先后顺序,如果不清楚抽象工厂模式可以先往前翻翻 从 ...
- 设计模式-生成器模式
1.问题描述 生活场景:你玩过种地.种花等类似的游戏吗?这是最近很流行的游戏哟!下面就是从种花游戏中剪切的四个花盆(盆景),很漂亮吧!你将不同的种子放入花盆,一段时间后你就可以看到各种美丽的鲜花了,不 ...
最新文章
- IDEA : Git Pull Failed 解决(IDEA中使用stash功能)
- 成都Uber优步司机奖励政策(1月9日)
- 爬过这 6 个坡,你就能对 Linux 操作系统了如指掌
- android listview 自动循环滚动条,ListView的自动循环滚动显示【原创】
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(四)代码简化
- NumPy之:多维数组中的线性代数
- linux修改隐藏文件生效,在Linux传统文件系统下隐藏属性的修改-linux修改文件名...
- 达尔文进化奖_使用Kydavra GeneticAlgorithmSelector将达尔文进化应用于特征选择
- 洛谷【数据结构1-1】线性表
- comsol入门闲聊
- 10天竟然只写了一行代码,谁的锅?
- 网易云音乐在 Ubuntu 下缩放的问题
- Linux 网桥代码分析 六 网桥数据转发函数分析
- [IJKPLAYER]编译与DEMO运行
- 怎么把照片变年轻?这两个照片变年轻小妙招教给你
- HTML高德地图标注,文本标记-点标记-示例中心-JS API 示例 | 高德地图API
- 我的世界java版红石电梯_《我的世界》红石电梯建造教程
- ettercap dns欺骗
- 微信小程序:小程序开发测试时候使用http请求
- 计算机硬件各部件的名称 功能参数,计算机基础知识教程-硬件.ppt