设计模式之建造者模式(Builder)

建造者模式原理:建造模式主要是用于产生对象的各个组成部分,而抽象工厂模式则用于产生一系列对象,建造者模式而且要求这些对象的组成部分有序。

代码如下:

#include <iostream>
using namespace std;class Builder
{
public:virtual void buildHead(){}virtual void buildBody(){}virtual void buildLeftArm(){}virtual void buildRightArm(){}virtual void buildLeftLeg(){}virtual void buildRightLeg(){}
};
class BuilderFat:public Builder
{
public:virtual void buildHead(){cout << "fat head" <<endl;}virtual void buildBody(){cout << "fat Body" << endl;}virtual void buildLeftArm(){cout << "fat Left Arm" <<endl;}virtual void buildRightArm(){cout << "fat Right Arm" <<endl;}virtual void buildLeftLeg(){cout << "fat Left Leg" <<endl;}virtual void buildRightLeg(){cout << "fat Right leg" <<endl;}
};class BuilerThin:public Builder
{
public:virtual void buildHead(){cout << " thin head" <<endl;}virtual void buildBody(){cout << "thin Body" << endl;}virtual void buildLeftArm(){cout << "thin Left Arm" <<endl;}virtual void buildRightArm(){cout << "thin Right Arm" <<endl;}virtual void buildLeftLeg(){cout << "thin Left Leg" <<endl;}virtual void buildRightLeg(){cout << "thin Right leg" <<endl;}
};class Director
{
public:Director(Builder *ptmp = NULL):pBuilder(ptmp){}void createPerson(){pBuilder->buildHead();pBuilder->buildBody();pBuilder->buildLeftArm();pBuilder->buildRightArm();pBuilder->buildRightArm();pBuilder->buildLeftLeg();pBuilder->buildRightLeg();}
private:Builder* pBuilder;
};int main()
{BuilderFat fat;Director *pDirector = new Director(&fat);pDirector->createPerson();delete pDirector;return 0;
}

 

转载于:https://www.cnblogs.com/liuweilinlin/p/3203305.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java写七彩文字_【PS精选案例教程】创建一个漂亮的七彩文字

原标题&#xff1a;【PS精选案例教程】创建一个漂亮的七彩文字效果图&#xff1a;步骤1. 新建一个文档(大小随意)步骤2. 滤镜→渲染→云彩步骤3. 可以按CtrlAltF增加效果步骤4. CtrlJ复制一层步骤5.设置前景色步骤6. 用径向渐变从中间往外拉一个渐变步骤7. 设置“图层1”混合模…

std::copy

如果要把一个序列&#xff08;sequence&#xff09;拷贝到一个容器&#xff08;container&#xff09;中去&#xff0c;通常用std::copy算法&#xff0c;代码如下&#xff1a; std::copy(start, end,std::back_inserter(container)); 这里&#xff0c;start和end是输入序列&…

java 正则 栈溢出_关于Java正则引起的StackOverFlowError问题以及解决方案 | 学步园...

java 正则异常 java.lang.StackOverflowError&#xff1a;在使用正则表达式的时候&#xff0c;底层是通过迭代方式执行的&#xff0c;每一层的迭代都会在栈线程的大小中占一定内存&#xff0c;如果迭代的层次很多&#xff0c;就会报出stackOverFlowError异常。所以在使用正则的…

容斥原理的二进制实现模版

最近学习容斥原理&#xff0c;实现容斥原理大致有三种方法&#xff1a;dfs&#xff0c;队列数组&#xff0c;二进制。 今天主要讲下二进制实现容斥原理&#xff1a; 有一个集合{A1……An}&#xff0c;求集合的子集&#xff1f;很显然答案为 也就是2^n个&#xff0c;也就是每一个…

测试鼠标双击_鼠标环境可靠性测试是什么

鼠标和电脑是的组合&#xff0c;购买电脑时一般商家会送给用户一个配套的鼠标&#xff0c;鼠标和电脑一样&#xff0c;对环境的要求较高&#xff0c;极少部分的鼠标由于短路或者是环境温度过高的问题会导致鼠标出现自燃的现象&#xff0c;如果用户此时正在使用电脑编辑文件&…

snprintf函数用法

int snprintf(char *restrict buf, size_t n, const char * restrict format, ...); 函数说明:最多从源串中拷贝n&#xff0d;1个字符到目标串中&#xff0c;然后再在后面加一个0。所以如果目标串的大小为n 的话&#xff0c;将不会溢出。 函数返回值:若成功则返回欲写入的字符…

virtualbox主机网络管理 未能创建_如何在 VirtualBox 中增加现有虚拟机的磁盘大小 | Linux 中国...

导读&#xff1a;你可以在 VirtualBox 中扩大虚拟硬盘&#xff0c;即使在创建之后也可以。                   本文字数&#xff1a;1434&#xff0c;阅读时长大约&#xff1a;2分钟https://linux.cn/article-12869-1.html作者&#xff1a;Dimitrios Savvopoulos译者…

java 迪米特法则_迪米特法则

文章首发于个人博客 shuyi.tech&#xff0c;欢迎点击原文跳转阅读。 设计模式说白了就是传统经验的总结&#xff0c;它能让我们在合适的场景使用合适的模式&#xff0c;从而加快我们的编程速度&#xff0c;也能提高系统的扩展性、稳定性。这里我想就设计模式提出两个观点&#…

js中的==与===的区别

""&#xff1a; 1&#xff0c;如果两表达式的类型不同&#xff0c;则试图将它们转换为字符串、数字或 Boolean 量。 2&#xff0c;NaN 与包括其本身在内的任何值都不相等。 3&#xff0c;负零等于正零。 4&#xff0c;null 与 null 和 undefined 相等。 5&#x…

sql 2000 安装问题

1. 安装时报command line option syntax error.type command /?for help 去掉安装文件的中文路径 2. 安装完成后&#xff0c;打开企业管理器&#xff0c;出现mmc无法初始化管理单元。 原因是之前安装的sqlserver2000没有卸载干净 1) 彻底删除C:\Program Files\Microsoft SQL …

mysql 交换工资_LeetCode:627.交换工资

题目给定一个 salary 表&#xff0c;如下所示&#xff0c;有 m 男性 和 f 女性 的值。交换所有的 f 和 m 值(例如&#xff0c;将所有 f 值更改为 m&#xff0c;反之亦然)。要求只使用一个更新(Update)语句&#xff0c;并且没有中间的临时表。注意&#xff0c;您必只能写一个 …

usb长包数据结束判断_如何判断南桥好坏 判断南桥好坏方法介绍【详解】

南桥是电脑里重要的零部件&#xff0c;南桥芯片主要是负责I/O接口等一些外设接口的控制、IDE设备的控制及附加功能等等。那么南桥发生故障&#xff0c; 怎么判断南桥好坏 呢?一、通过测PCI槽、AGP槽对地打阻值可判定南北桥有无损坏1、PCI槽中所有的AD复合线对地打阻值都为300&…

C++ MFC界面读写USB HID设备数据程序

发一个简单易用的界面&#xff0c;用来对USB HID设备&#xff08;比如说游戏手柄&#xff0c;控制面板等&#xff09;读写数据&#xff0c;一般情况下面板上有一些LED&#xff0c;可以帮助我们测试读写是否正确。另外&#xff0c;需要可以修改vendorID和prodcutID,这样一个界面…

nano-pc-t1 4412 显示驱动分析

1. 和其它内核代码类似。 显示驱动的分析都是由 drivers/video/fbmem.c开始&#xff0c;fbmem.c是显示驱动的抽象&#xff0c;实际只是一个框架性的东西。 fbmem_init 中实现了一个字符设备驱动&#xff0c;并创建了class&#xff0c;但是没有生成设备文件。 这个字符设备驱动的…

mysql中索引约束有哪些_Mysql中索引和约束的示例语句

外键查询一个表的主键是哪些表的外键SELECTTABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAMEFROMINFORMATION_SCHEMA.KEY_COLUMN_USAGEWHERETABLE_SCHEMA mydbnameAND REFERENCED_TABLE_NAME 表名;导出所有外键语句SELECTCONCAT(ALTER …

taskkill无法终止进程 拒绝访问_解决删除文件时,提示无法删除的问题

有时我们想删除某个程序文件夹&#xff0c;或是卸载后残留的一些 .dll 等后缀的文件&#xff0c;却一直提示 “运行中” 、 “权限不足” &#xff0c;甚至用第三方的强力删除功能都无法删除。这时我们可以用系统自带的命令行功能&#xff0c;使用几个简单的小命令就可以彻底删…

javascript删除数组里的对象

Array.prototype.del function(value) {//删除数组中指定的元素&#xff0c;返回新数组function hasValue(array, value) {for(var i 0; i < array.length; i) {if (value array[i]) {return i;}}return -1;}var position hasValue(this, value);var temp new Array ;i…

擦窗机器人测试标准_擦窗机器人,我选择玻妞的三个理由!

很多人都喜欢高层&#xff0c;一览无遗&#xff0c;广阔风景&#xff01;可现实是无论什么高层湖景都会被窗户上日积月累的灰尘遮挡的严严实实&#xff0c;每次擦窗都累到怀&#xff01;疑&#xff01;人&#xff01;生&#xff01;于是一年又一年&#xff0c;你想要的风景始终…

Oracle客户端与java_Oracle 谈 JavaFX 及 Java 客户端技术的未来

原标题&#xff1a;Oracle 谈 JavaFX 及 Java 客户端技术的未来据 Oracle 博客称&#xff0c;从 JDK 11 开始&#xff0c;Oracle 将从 JDK 中删除 JavaFX&#xff0c;但在 2022 年之前&#xff0c;Oracle 还会继续为 JDK 8 中的 JavaFX 提供商业支持。2011 年&#xff0c;JavaF…

基于Passthru的NDIS开发的个人理解

基于Passthru的NDIS开发的个人理解 这几天对NDIS的学习&#xff0c;基本思路是&#xff1a;首先熟悉理论知识→然后下载一个例子进行研究→最后例子自己模仿扩展→最最后尝试自己写一个新的。 Passthru是微软NDIS自己写的一个框架驱动&#xff0c;NDIS开发者可以在此框架上进行…