建造者模式

建造者模式的概念

  1. Builder 模式也叫建造者模式或者生成器模式,是由 GoF 提出的 23 种设计模式中的一种。 Builder 模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的 创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。
  2. 对象的创建:Builder 模式是为对象的创建而设计的模式- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象- 关注对象创建的各部分的创建过程:不同的工厂 (这里指 builder 生成器)对产品属性有不同的创建方法

建造者模式的角色和职责

  1. 建造者(Builder):为创建产品各个部分,统一抽象接口。
  2. ConcreteBuilder:具体的创建产品的各个部分,部分 A, 部分 B,部分 C。
  3. 设计师(Director):构造一个使用 Builder 接口的对象。
  4. Product:表示被构造的复杂对象。

ConcreteBuilder 创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类, 包括将这些部件装配成最终产品的接口。

建造者模式的适用情况

一个对象的构建比较复杂,将一个对象的构建和对象的表示进行分离。

建造者模式的实现

#include<iostream>
#include<string>using namespace std;//一个房子不管是公寓还是别墅,他都有三种属性,墙,地板,门
//建造公寓和别墅时,都需要建造者有房子的图纸//房子类
class House
{
public://创建地板void setFloor(string floor){this->m_floor = floor;}//创建墙void setWall(string wall){this->m_wall = wall;}//创建门void setdoor(string door ){this->m_door = door;}//获取地板string getFloor(){return m_floor;}//获取墙string getWall(){return m_wall;}//获取门string getDoor(){return m_door;}
private:string m_floor;//地板string m_wall;//墙string m_door;//门
};//建造者
class Builder
{
public:virtual void makeFloor() = 0; //建造者建地板virtual void makeWall() = 0; //建造者建墙virtual void makeDoor() = 0; //建造者建门virtual House *GetHouse() = 0; //建造者建房子
};//建造者建造公寓 继承建造者类
class FlatBuild : public Builder
{
public:FlatBuild(){phouse = new House;//创建一个新的房子}virtual void makeFloor(){//这个房子的墙是公寓的地板phouse->setFloor("公寓的地板");}virtual void makeWall(){phouse->setWall("公寓的墙");}virtual void makeDoor(){phouse->setdoor("公寓的门");}virtual House *GetHouse(){return phouse;}
private:House *phouse; //维护一个房子类的指针
};//建造者建造别墅
class VillBuild :public Builder
{
public:VillBuild(){pHouse = new House;}virtual void makeFloor(){pHouse->setFloor("别墅的地板");}virtual void makeWall(){pHouse->setWall("别墅的墙");}virtual void makeDoor(){pHouse->setdoor("别墅的门");}virtual House *GetHouse(){return pHouse;}
private:House *pHouse;
};//设计师类,用来指挥建造者
class Director
{
public:void Construct(Builder *builder){builder->makeFloor();builder->makeWall();builder->makeDoor();}
};int main(void)
{//客户自造房子,不花钱请建造者和设计师House *phouse = new House;phouse->setdoor("自己造的门");phouse->setFloor("自己造的地板");phouse->setWall("自己造的墙");cout << phouse->getDoor() << endl;cout << phouse->getWall() << endl;cout << phouse->getFloor() << endl;/*//建造者直接造公寓,不花钱请设计师Builder *builder = new FlatBuild;builder->makeFloor();builder->makeDoor();builder->makeWall();*///设计师指挥 建造者 建房子Director *director = new Director;//建公寓Builder *builder = new FlatBuild;director->Construct(builder);//设计师指挥建造者干活,直接全部建好House*house = builder->GetHouse();//获取已经建好房子的钥匙cout << house->getFloor() << endl;//查看建好房子的地板delete house;delete builder;//建别墅builder = new VillBuild;director->Construct(builder);//设计师 指挥工程队  建好别墅house = builder->GetHouse();//从建造者那块拿到别墅的钥匙cout << house->getFloor() << endl;//查看建好的别墅的地板delete house;delete builder;delete director;system("pause");return 0;
}

建造者模式和工厂模式的区别

Factory 模式中:
  1. 有一个抽象的工厂。
  2. 实现一个具体的工厂—汽车工厂。
  3. 工厂生产汽车 A,得到汽车产品 A。
  4. 工厂生产汽车 B,得到汽车产品 B。 这样做,实现了购买者和生产线的隔离。强调的是结果。
Builder 模式:
  1. 引擎工厂生产引擎产品,得到汽车部件 A。
  2. 轮胎工厂生产轮子产品,得到汽车部件 B。
  3. 底盘工厂生产车身产品,得到汽车部件 C。
  4. 将这些部件放到一起,形成刚好能够组装成一辆汽车的整体。
  5. 将这个整体送到汽车组装工厂,得到一个汽车产品。
总结

这样做,目的是为了实现复杂对象生产线和其部件的解耦。强调的是过程 两者的区别在于:

  1. Factory 模式不考虑对象的组装过程,而直接生成一个我想要的对象。
  2. Builder 模式先一个个的创建对象的每一个部件,再统一组装成一个对象。
  3. Factory 模式所解决的问题是,工厂生产产品。
  4. 而 Builder 模式所解决的问题是工厂控制产品生成器组装各个部件的过程,然后从产品 生成器中得到产品。

设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)相关推荐

  1. 设计模式之工厂方法模式、抽象工厂模式的概念和实现及使用“反射技术+读取配置文件”的方法对工厂模式进行改进(软件工程综合实践课程第三周个人作业)

    文章目录 一.实验目的 二.知识总结 1.工厂方法模式简介 2.抽象工厂模式简介 3.工厂模式小结 4.利用"反射技术+读取配置文件"的方法改进程序 三.实验内容 1. 工厂模式实 ...

  2. 创维linux进入工厂模式,彩色电视机进入工厂模式后数据调乱了,如何恢复默认?-创维电视8TTN工厂模式数据怎么调...

    彩色电视机进入工厂模式后数据调乱了,如何恢复默认? 创维彩电进入与退出工厂模式方法的汇总 一. D系列 5D01机芯: 进入: 在遥控器屏显键的正下方,加装一个按键(SERVICE键),按该键即可进入 ...

  3. 设计模式--工厂模式(三种)

    工厂模式 概述 简单工厂 1.基本结构 2.示例 3.优缺点 4.简单工厂+配置文件解除耦合 工厂方法模式 1.概念 2.基本结构 3.示例 4.优缺点 抽象工厂模式 1.概念 2.基本结构 3.示例 ...

  4. 03-肯德基点餐:抽象工厂模式

    3.1模式关联的故事背景 去肯德基点餐(一个麻辣鸡腿汉堡.四个奥尔良烤鸡翅.一包薯条.两杯可乐) 3.2模式定义 抽象工厂模式(Abstract Factory Pattern)提供了一个接口,用于创 ...

  5. 设计模式之---工厂模式、建造者模式

    ☺ 对于工厂模式,个人学习需要掌握 注意答案的重点标黑了.对于工厂模式.建造者模式,掌握,我下面这几点就很棒棒. 一.工厂模式 1.什么是工厂模式:[关键字factory] 答:创建对象时,不直接ne ...

  6. 设计模式之工厂模式和抽象工厂

    设计模式分类 通常来说设计模式分为三大类: 创建型模式,共 5 种:工厂模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共 7 种:适配器模式.装饰器模式.代理模式.外观模式.桥接模 ...

  7. 设计模式之——简单(静态)工厂模式和抽象工厂模式

    文章目录 [关于设计模式] 设计模式的诞生 设计模式概念与解读 设计模式的原则 [关于工厂模式] 简单工厂(静态工厂)模式的概念 抽象工厂模式 工厂模式的使用时机和注意事项 给自己的思考 [关于设计模 ...

  8. 设计模式(20):创建型-抽象工厂模式(Abstract Factory)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  9. 【一】Java 设计模式学习记录: 工厂模式

    文章目录 一.设计模式的分类 二.工厂模式 2.1 简单工厂模式 2.1.1 解决的问题 2.1.2 简单工厂模式是什么 2.1.3 优缺点 2.2 工厂方法模式 2.2.1 解决的问题 2.2.2工 ...

最新文章

  1. mongodb 开启身份认证_Yum安装mongodb及开启用户认证远程登录
  2. FLASH模仿苹果菜单源码.(AS苹果菜单源码)
  3. Spring Cache抽象-使用Java类注解的方式整合EhCache
  4. key位置 win10生成的ssh_Git实现ssh免密登录
  5. 深度解析 | 基于DAG的分布式任务调度平台:Maat 1
  6. Linux必知必会的目录结构
  7. 使用tmpfs的好处
  8. 从办公桌可以看透一个人
  9. 单片机课程设计--电子密码锁(源代码+proteus仿真)
  10. Codeforces918 D. MADMAX(博弈,记忆化搜索)
  11. vue自定义指令—directive详解
  12. STEM 是个怎样高大上的东西?
  13. Mac电脑的自动切换输入法
  14. C# 基础之Linq编程
  15. 10年,20年后,你会是什么样子?
  16. tyvj 1031 热浪
  17. 高科技引领时尚 甘肃天星独创全球共振迷你音响
  18. Vue项目实战项目记录(电商后台管理系统)
  19. 网线的做法 及 POE的介绍
  20. 谈谈redis缓存击穿透和缓存击穿的区别,雪崩效应

热门文章

  1. django F和Q 关键字使用
  2. [cdq分治][树状数组] Jzoj P4419 hole
  3. CPU-内存-IO-网络调优
  4. QuartZ.net 常用配置说明
  5. B/S和C/S架构图解
  6. Fix “Windows cannot access the specified device path or file” Error
  7. BCD码与十进制的相互转换
  8. apache2.4.x三种MPM介绍
  9. 使用DataTable更新数据库
  10. C语言一个小小的问题引起的对指针的探究。。。