设计模式-创建型-生成器
#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;
}
设计模式-创建型-生成器相关推荐
- 软考软件设计师---面向对象技术(设计模式--创建型--工厂、生成器、原型、单例)
转载于自己博客文章: 软考软件设计师---面向对象技术(设计模式--创建型--工厂.生成器.原型.单例) - 松下之约一.创建型设计模式关注对象的创建,让一个类得到实例化过程由另一类的对象完成.分类: ...
- 设计模式-创建型模式-建造者模式
设计模式-创建型模式-建造者模式 建造者模式即生成器模式,将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 代码如下 // 产品类 public class Product{pu ...
- 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript
设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...
- 设计模式-创建型模式-模板方法
设计模式-创建型模式-模板方法 定义一个操作中的算法框架,将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义一个算法的步骤. protected 对于本包及其子类可见. 类图 代码 代 ...
- 设计模式-创建型模式-工厂模式(工厂三兄弟)
设计模式-创建型模式-工厂模式(工厂三兄弟) 工厂模式分为简单工厂,工厂方法,抽象工厂. 简单工厂模式 一个接口,三个具体类,一个工厂,通过选择,生产出对应的对象. package demo2;pub ...
- 设计模式(创建型)之建造者模式(Builder Pattern)
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...
- 七大设计原则与设计模式(创建型模式、结构型模式、行为型模式)
七大设计原则 开闭原则.依赖倒置原则.单一职责原则.接口隔离原则.迪米特法则(最少知道原则).里氏替换原则.合成 (组合).聚合复用原则 开闭原则 定义: 一个软件实体如类.模块和函数应该对扩展开放, ...
- 设计模式-创建型模式-抽象工厂模式
工程源码:设计模式-创建型模式-抽象工厂模式https://download.csdn.net/download/qq_40788199/85544119 码云:设计模式-创建型模式-抽象工厂模式ht ...
- 设计模式-创建型模式-简单工厂模式
工程地址:设计模式-简单工厂源码-C++文档类资源-CSDN下载C++设计模式-创建型模式-简单工厂模式源码更多下载资源.学习资料请访问CSDN下载频道.https://download.csdn.n ...
最新文章
- 线性代数 2021-2022-1 考试要点
- 微服务模式下,实现前后端多资源服务调用
- Spring加载resource时classpath*:与classpath:的区别
- php 显示下拉菜单,PHP在下拉列表中显示菜单树
- 可见性、原子性和有序性问题
- python何时用list,dict,set
- 泡沫下的破浪者,智能语音产品到底落地何处?
- WPF太阳、地球、月球运动轨迹模拟
- 极速office(excel)根据身份证号如何提取年龄
- 电子产品EMC不合格,如何整改?
- web端实现类微信的语音播放效果
- ai跟随路径_AI 路径寻找器(形状组合工具)-怎么使用,使用教程
- KeilC51基础 利用仿真测试代码的运行时间
- 企业的商业模式和盈利模式概述,业务流程再造
- NiFi用户指南文档分析(2)
- idea 提示Expecting newline or semicolon解决办法
- 数字图像处理|Matlab-数字图像编码实验-无损编码/压缩算法实验-实现行程编码压缩, 计算原图和压缩以后的尺寸,计算压缩率并比较分析
- Windows 11和Windows 2022 TLS/SSL(Schannel SSP)的加密套件
- 词云中去重复的词_手把手教你挖掘蓝海词,打造爆款标题!
- Java开发前景怎么样?值得学吗?
热门文章
- java二维数奇数组金字塔_金字塔内发现一组神奇数字 至今无解(图)
- android多线程的本质,[原创]分析unidbg(unidbgMutil)多线程机制
- C~K的班级(II)_JAVA
- 16.异常处理机制:exception
- java程序员学C#基本语法两个小时搞定(对比学习)
- Jekyll主题收藏
- Java Date 和 Calendar
- 日本各地方与所属各县名称及其读音
- C++ WINDOWS API 如何使用NMAKE和CL编译
- 《Effective STL》学习笔记(第一部分)