设计模式C++实现(3)——建造者模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》(DP)两本书。本文介绍建造者模式的实现。
建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(DP)。《大话设计模式》举了一个很好的例子——建造小人,一共需建造6个部分,头部、身体、左右手、左右脚。与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。建造小人就是在控制下一步步构造出来的。创建者模式可以能更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。下面给出建造者模式的UML图,以建造小人为实例。
对于客户来说,只需知道导向者就可以了,通过导向者,客户就能构造复杂的对象,而不需要知道具体的构造过程。下面给出小人例子的代码实现。
- class Builder
- {
- public:
- virtual void BuildHead() {}
- virtual void BuildBody() {}
- virtual void BuildLeftArm(){}
- virtual void BuildRightArm() {}
- virtual void BuildLeftLeg() {}
- virtual void BuildRightLeg() {}
- };
- //构造瘦人
- class ThinBuilder : public Builder
- {
- public:
- void BuildHead() { cout<<"build thin body"<<endl; }
- void BuildBody() { cout<<"build thin head"<<endl; }
- void BuildLeftArm() { cout<<"build thin leftarm"<<endl; }
- void BuildRightArm() { cout<<"build thin rightarm"<<endl; }
- void BuildLeftLeg() { cout<<"build thin leftleg"<<endl; }
- void BuildRightLeg() { cout<<"build thin rightleg"<<endl; }
- };
- //构造胖人
- class FatBuilder : public Builder
- {
- public:
- void BuildHead() { cout<<"build fat body"<<endl; }
- void BuildBody() { cout<<"build fat head"<<endl; }
- void BuildLeftArm() { cout<<"build fat leftarm"<<endl; }
- void BuildRightArm() { cout<<"build fat rightarm"<<endl; }
- void BuildLeftLeg() { cout<<"build fat leftleg"<<endl; }
- void BuildRightLeg() { cout<<"build fat rightleg"<<endl; }
- };
- //构造的指挥官
- class Director
- {
- private:
- Builder *m_pBuilder;
- public:
- Director(Builder *builder) { m_pBuilder = builder; }
- void Create(){
- m_pBuilder->BuildHead();
- m_pBuilder->BuildBody();
- m_pBuilder->BuildLeftArm();
- m_pBuilder->BuildRightArm();
- m_pBuilder->BuildLeftLeg();
- m_pBuilder->BuildRightLeg();
- }
- };
客户的使用方式:
- int main()
- {
- FatBuilder thin;
- Director director(&thin);
- director.Create();
- return 0;
- }
至此,《设计模式:可复用面向对象软件的基础》一书上的5种创建型模式介绍完了,分别是工厂方法模式、抽象工厂模式、原型模式、建造者模式、单例模式。
设计模式C++实现(1)——工厂模式
设计模式C++实现(4)——单例模式
设计模式C++实现(5)——原型模式、模板方法模式
本人享有博客文章的版权,转载请标明出处 http://blog.csdn.net/wuzhekai1985
设计模式C++实现(3)——建造者模式相关推荐
- 北风设计模式课程---7、建造者模式
北风设计模式课程---7.建造者模式 一.总结 一句话总结: 设计模式都是对生活中好的做事方法的一些抽象,使得各司其职,减少出错. 建造者模式可以看做模仿的生活中:设计师,施工队做复杂房子交给客户的场 ...
- 设计模式(五)——建造者模式
设计模式(五)--建造者模式 一.建造者模式简介 1.建造者模式简介 建造者模式将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式和抽象工厂模式在功能上很相似,都是用来 ...
- 肝一肝设计模式【四】-- 建造者模式
系列文章目录 肝一肝设计模式[一]-- 单例模式 传送门 肝一肝设计模式[二]-- 工厂模式 传送门 肝一肝设计模式[三]-- 原型模式 传送门 肝一肝设计模式[四]-- 建造者模式 传送门 肝一肝设 ...
- 设计模式(五)——建造者模式详解
设计模式(五)--建造者模式详解 概述 结构 代码案例 优缺点 使用场景 模式扩展 创建者模式对比 工厂方法模式和建造者模式 抽象工厂模式和建造者模式 概述 建造者模式就是说将一个复杂对象的构建和表示 ...
- 大战设计模式【17】—— 建造者模式
建造者模式(Builder) 设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample 一.定义 将一个复杂对象的构建与它的表示 ...
- 设计模式(4)建造者模式/生成器模式(Builder)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...
- 设计模式(第四式:建造者模式)
概念: 建造者模式:将一个结构的建造和它的表示分离,使得同样的建造过程可以创建不同的表示. 实现: 定义书籍接口: public abstract class Book {private Intege ...
- 一天一个设计模式之JS实现——建造者模式
参考文章: java设计模式之建造者模式 一.什么是建造者模式 建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 工厂类模式提供的是创建单个类的模式,而建造者 ...
- 《设计模式之禅》-建造者模式
建造者模式 又称为生成器模式(设计模式之禅 101-112页) 定义: 将一个复杂对象的构建与它的表示分开,使得同样的创建过程可以创建不同的表示 在建造者模式中,有如4个角色 Product 产品类 ...
- Android设计模式详解之建造者模式
前言 Builder模式是一种创建型设计模式. 定义:将一个复杂对象的创建与它的表示分离,使得同样的构造过程可以创建不同的表示. 使用场景: 相同的方法,不同的执行顺序,产生不同的事件结果时: 多个部 ...
最新文章
- 2022-2028年中国三网融合产业深度调研及投资前景预测报告
- P2642 双子序列最大和(线性DP)(最大子段和 + 合唱队列)
- 报错解决:alueError: When using data tensors as input to a model, you should specify the `steps_per_epoch
- 利用AOP实现对方法执行时间的统计
- script runat=server,%%区别
- C# Winform程序中使用TeeChart实现简单的图表展示
- 如何将编写好的CS文件做成exe可执行文件
- 《数据库原理与应用》(第三版)第13章 安全管理 基础 习题参考答案
- (四)DOM对象和jQuery对象
- 解决toolbar左边空出一部分的问题
- 为什么越来越多的开发者选择使用Spring Boot
- 【计算机网络复习 数据链路层】3.5.5 CSMA-CA协议
- 测带宽的工具_发送端测试的主力设备 - 实时示波器朝向高带宽高位数发展
- java实例变量,局部变量,类变量和final变量
- 大连工业大学计算机专硕调剂,2020大连工业大学调剂信息
- c语言怎么编程判断关键字,C语言关键字
- 数独解题程序的python实现_使用Python编写程序求解数独游戏答案
- 【成功实践篇】VirtualBoX虚拟机和本地共享存储目录
- 柳传志退休:激荡三十五年
- excel怎么录入身份证号码快速方便?