建造者模式的思考

(1)建造者模式的功能:构建复杂的产品,而且是细化的、分步骤的构建产品。也就是其重在一步一步解决构造复杂对象的问题。

  ①构建的过程是统一的、固定不变的(则指导者来制定)。变化的是的每步的具体的实现,由建造者来实现。

  ②建造者模式的重心在于分离构建算法具体构造的实现

(2)建造者模式的构成——两个部分

  ①Builder接口:这里定义了如何构建各个部件,也就是知道每个部件的功能是如何实现的,以及如何装配这些部件到产品中去。即部件构造和产品装配

  ②Director:知道按什么流程来构建产品,负责整体的构建算法,通常是分步骤来执行。这里要强调的是,整体构建算法是固定的。当Director实现整体构建算法的时候,遇到需要创建和组合具体部件的时候,就会把这些具体的实现委托给Builder去完成

【编程实验】建造神舟飞船

//声明文件

//创建型模式:建造者模式
//神舟飞船的组装
#include <stdio.h>
#include <string>using namespace std;//Creational.Builder(创建型模式—建造者模式)
//*************************辅助类:各个部件************************
//轨道舱
class COrbitalModule{
private:string strDevice;
public:COrbitalModule(string device);void SetDev(string device);string GetDev();
};//发动机
class CEngine{
private:string strDevice;
public:CEngine(string device);void SetDev(string device);string GetDev();
};//逃逸塔
class CEscapeTower{
private:string strDevice;
public:CEscapeTower(string device);void SetDev(string device);string GetDev();
};//最终产品Product
class CAirShip{COrbitalModule* pOrbitalModule;//轨道舱CEngine* pEngine;//发动机CEscapeTower* pEscapeTower;//逃逸塔
public:CAirShip();void SetOrbitalModule(COrbitalModule* orbitalmodule);COrbitalModule* GetOrbitalModule();void SetEngine(CEngine* engine);CEngine* GetEngine();void SetEscapeTower(CEscapeTower* escapetower);CEscapeTower* GetEscapeTower();void Launch();
};//*******************************************Builder:建造者*****************************
//抽象建造者
class CAbsAirShipBuilder{
public:virtual void BuildOrbitalModule() = 0;//构建轨道舱virtual void BuildEngine() = 0;//构建发动机virtual void BuildEscapeTower() = 0;//构建逃逸塔
};
//具体建造者
class CAirShipBuilder : public CAbsAirShipBuilder{
private:CAirShip* pAirShip;
public:CAirShipBuilder();~CAirShipBuilder();//OrbitalModule部件的构建void BuildOrbitalModule();//Engine部件的构建void BuildEngine();//EscapeTower部件的构建void BuildEscapeTower();//返回最终的整个产品(神舟飞船)CAirShip* GetAirShip();
};
//********************************Director:指导者******************************
class CAirShipDirector{
private:CAbsAirShipBuilder* pBuilder;
public:CAirShipDirector(CAbsAirShipBuilder* builder);//构建过程//1、建造者所构建的各部分是可以是先后顺序的,但本例这个顺序不明显或无关紧要。//2、本类中只有构建的过程(流程,也就算法),组装过程放在Builder类中。void ProductByStep();
};

//实现文件

//*************************辅助类:各个部件************************
//轨道舱
COrbitalModule::COrbitalModule(string device) : strDevice(device) {}
void COrbitalModule::SetDev(string device){strDevice = device;}
string COrbitalModule::GetDev(){return strDevice;}//发动机
CEngine::CEngine(string device) : strDevice(device) {}
void CEngine::SetDev(string device){strDevice = device;}
string CEngine::GetDev(){return strDevice;}
//逃逸塔
CEscapeTower::CEscapeTower(string device) : strDevice(device) {}
void CEscapeTower::SetDev(string device){strDevice = device;}
string CEscapeTower::GetDev(){return strDevice;}
//最终产品Product
CAirShip::CAirShip(){ pOrbitalModule = NULL; pEngine = NULL; pEscapeTower = NULL; }
void CAirShip::SetOrbitalModule(COrbitalModule* orbitalmodule){pOrbitalModule = orbitalmodule;}
COrbitalModule* CAirShip::GetOrbitalModule(){return pOrbitalModule;}
void CAirShip::SetEngine(CEngine* engine){pEngine = engine;}
CEngine* CAirShip::GetEngine(){return pEngine;}
void CAirShip::SetEscapeTower(CEscapeTower* escapetower){pEscapeTower = escapetower;}
CEscapeTower* CAirShip::GetEscapeTower(){return pEscapeTower;}
void CAirShip::Launch()
{cout << pOrbitalModule->GetDev() << "准备就绪" << endl;//检测轨道舱是否正常cout << pEngine->GetDev() << "准备就绪" << endl;//检测发动机是否正常cout << pEscapeTower->GetDev() << "准备就绪" << endl;//检测逃逸塔是否正常cout << "准备发射" << endl;//发射
}//*******************************************Builder:建造者*****************************
//抽象建造者
//具体建造者
CAirShipBuilder::CAirShipBuilder(){pAirShip = new CAirShip();}
CAirShipBuilder::~CAirShipBuilder()
{if(pAirShip != NULL){if(pAirShip->GetOrbitalModule() != NULL)     delete pAirShip->GetOrbitalModule();if(pAirShip->GetEngine() != NULL)                    delete pAirShip->GetEngine();if(pAirShip->GetEscapeTower() != NULL)          delete pAirShip->GetEscapeTower();delete pAirShip;}
}
//OrbitalModule部件的构建
void CAirShipBuilder::BuildOrbitalModule()
{if(pAirShip->GetOrbitalModule() != NULL)       delete pAirShip->GetOrbitalModule();pAirShip->SetOrbitalModule(new COrbitalModule("太空舱的轨道舱"));//组装工作
}
//Engine部件的构建
void CAirShipBuilder::BuildEngine()
{if(pAirShip->GetEngine() != NULL)          delete pAirShip->GetEngine();pAirShip->SetEngine(new CEngine("太空舱的发动机"));//组装工作
}
//EscapeTower部件的构建
void CAirShipBuilder::BuildEscapeTower()
{if(pAirShip->GetEscapeTower() != NULL)     delete pAirShip->GetEscapeTower();pAirShip->SetEscapeTower(new CEscapeTower("太空舱的逃逸塔"));
}
//返回最终的整个产品(神舟飞船)
CAirShip* CAirShipBuilder::GetAirShip(){return pAirShip;}
//********************************Director:指导者******************************
CAirShipDirector::CAirShipDirector(CAbsAirShipBuilder* builder) : pBuilder(builder){}
//构建过程
//1、建造者所构建的各部分是可以是先后顺序的,但本例这个顺序不明显或无关紧要。
//2、本类中只有构建的过程(流程,也就算法),组装过程放在Builder类中。
void CAirShipDirector::ProductByStep()
{//1.先构建发动机pBuilder->BuildEngine();//2.再构建轨道舱pBuilder->BuildOrbitalModule();//3.最后构建逃逸塔pBuilder->BuildEscapeTower();
}

//测试客户端

void main()
{//构建者CAirShipBuilder* pBuilder = new CAirShipBuilder();//指导者CAirShipDirector* pDirector = new CAirShipDirector(pBuilder);pDirector->ProductByStep(); //生成最终产品CAirShip* pAirShip = pBuilder->GetAirShip();pAirShip->Launch();delete pBuilder;delete pDirector;
}

Creational.Builder建造者模式:构造流程和具体实现的分离相关推荐

  1. C++设计模式-Builder建造者模式

    作用: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式和AbstractFactory模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是: ...

  2. 【C++设计模式】Builder 建造者模式详解

    文章目录 建造者模式概述 建造者模式结构与实现 模式结构 模式实现 建造者模式的应用实例:模拟游戏角色的创建 建造者模式的适用场景 建造者模式的优缺点 建造者模式概述 建造者模式是较为复杂的创建型模式 ...

  3. C++ 设计模式 建造者模式(复杂对象的构建与其表示分离)肯德基不同烧鸡的制作过程

    文章目录 1. 理论基础 2. 逻辑代码 3. 应用 3.1 做汉堡咯 思考: 为何肯德基麦当劳这些快餐能在中国这个上下五千年的国都站住脚? 中国的鱼香肉丝为何不能成为令人追捧的快餐? 因为麦当劳肯德 ...

  4. Builder 建造者模式

    前言 当一个对象的构造十分复杂时,我们需要将"构造过程"和他的"表示"进行分离,使得同样的构建过程可以表示不同的对象. 这个时候,需要使用 Builder 模式 ...

  5. 设计模式学习(十一):Builder建造者模式

    一.什么是Builder模式 大都市中林立着许多高楼大厦,这些高楼大厦都是具有建筑结构的大型建筑.通常,建造和构建这种具有建筑结构的大型物体在英文中称为Build. 在建造大楼时,需要先打牢地基,搭建 ...

  6. Builder建造者模式

    转载于:https://www.cnblogs.com/zquan/p/9446412.html

  7. 建造者模式(Builder)---创建型

    1 定义域特征 定义:将一个复杂的对象构建与其表示分离,使得同样的构建过程可以创建不同的表示.特征:用户只需要指定需要建造的类型即可,对于中间的细节不考虑. 本质:分离整体构建算法和部件构造.构建一个 ...

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

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

  9. [设计模式] - 建造者模式

    文章目录 一.建造者模式的简介 1. 什么是建造者模式 2. 建造者模式使用的业务场景 二.传统方式实现 1. 利用有参构造 三.建造者模式实现 第一步: 创建产品对象 第二步: 创建Builder接 ...

  10. java设计模式 建造模式_理解java设计模式之建造者模式

    理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...

最新文章

  1. 想知道Java程序如何才能提高性能吗?
  2. Linux下清理内存和Cache方法
  3. 一个python程序员需要掌握的知识-python初学者搭建网站需要了解的基础知识
  4. flask的日志输出current_app.logger.debug
  5. TextBox字符串转换为数字类型
  6. 查看mysql8的log位置
  7. WebAPI(part12)--事件高级
  8. 彻底解决Python3写爬虫或网站时的乱码问题
  9. linux tomcat连接mysql步骤_Linux安装JDK 、TOMCAT 、MYSQL 步骤
  10. hdu 1004(排序+统计)
  11. mac 下安装android studio(转)
  12. ONLYOFFICE界面汉化
  13. Mysql数据库内的索引操作【重点】
  14. linux 文件系统架构
  15. 最新顶级OA办公系统源码+CRM客户管理系统+自适应手机
  16. 标签thead与th的区别
  17. Maya vray 3S皮肤材质球设置与材质节点连接
  18. Edge 被 hao123 劫持解决方法
  19. USYD悉尼大学DATA1002 OralExam 复习(可能会考的内容)
  20. 单点登录系统中如何共享cookie

热门文章

  1. TP-LINK路由器如何设置DHCP
  2. Excel将一个表格的格式复制到其他表格,不用格式刷
  3. 系统完全优化 全面剖析XP
  4. 计算机课程教学质量分析,课程教学质量分析报告.PDF
  5. 迅雷xware android,迅雷固件Xware
  6. 我的CSDN之旅:2020年终总结
  7. it运维工程师的工作是做什么的?累吗?
  8. [bigdata-56] py3+selenium 抓取学信网 最简demo
  9. avr单片机c语言程序设计,avr单片机c语言编程风格介绍
  10. 对生成对抗网络GANs原理、实现过程、应用场景的理解(附代码),另附:深度学习大神文章列表