建造者模式 和 外观模式

news2024/11/15 13:35:56

这两种模式很像, 都是将一个复杂的流程统一用一个方法进行包装, 方便外界使用.
建造者模式更像是 外观模式的一种特里, 只对一个类的复杂初始化流程进行包装

建造者模式

简介: 就是一个类的构造方法可能很复杂, 由于系统的限制等原因, 可能很多初始化逻辑不能放在构造函数里, 所以就需要一个类来统一这种构建流程, 让外界不需要知道具体的复杂构造逻辑, 就能获取目标类的实例.
代码


class Building
{
private:
	string foundation;
	string main_wall;
	string floor;
public:
	
	Building() {};
	void build_foundation() 
	{ 
		cout << "must be first step" << endl;
		foundation = "create_foundation"; 
	}
	void build_main_wall() 
	{ 
		cout << "must be second step" << endl;
		main_wall = "build main wall"; 
	}
	void build_floor() 
	{ 
		cout << "must be third step" << endl;
		floor = "build floor"; 
	}

	// 声明为友元函数, 可以访问私有变量
	friend ostream& operator << (ostream& os, const Building* b);
};



ostream& operator << (ostream& os, const Building* b)
{
	os << b->foundation << "," << b->main_wall << "," << b->floor << endl;
	return os;
}


class Builder
{
public:
	Builder() {};
	Building* build_building()
	{
		Building* b = new Building();
		b->build_foundation();
		b->build_main_wall();
		b->build_floor();
		return b;
	}
};


int main()
{
	Builder* builder = new Builder();

	Building* building= builder->build_building();

	cout << building << endl;
	return 0;
}

执行结果
在这里插入图片描述

外观模式

简介: 外观模式: 一般情况下, 都是因为老系统比较负责, 用一个类统一包装一下业务逻辑, 方便新系统使用
比如打车到某个地方, 分为三个部分, 然后用一个方法统一执行这些步骤, 统一打车的业务逻辑
1: 网络约车
2: 验证手机尾号
3: 驾驶员驾驶汽车到达目的地
4: 付款

代码

class SystemCallCar
{
public:
	void run() { cout << "call car" << endl; }
};


class SystemVertifyPhone
{
public:
	void run() { cout << "vertify phone" << endl; }
};


class ReachTargetPlace
{
public:
	void run() { cout << "drive car reach target place"; }
};


class Pay
{
public:
	void run() { cout << "pay money" << endl; }
};



class Face
{
public:
	void run()
	{
		SystemCallCar* s1 = new SystemCallCar();
		SystemVertifyPhone* s2 = new SystemVertifyPhone();
		ReachTargetPlace* s3 = new ReachTargetPlace();
		Pay* s4 = new Pay();
		s1->run();
		s2->run();
		s3->run();
		s4->run();
	}
};


int main()
{
	Face f;
	f.run();
	return 0;
}

执行结果
在这里插入图片描述

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

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

相关文章

微信答题小程序产品研发-数据库与数据表设计

设计答题小程序的数据库和数据表时&#xff0c;我充分考虑了数据的完整性、一致性、安全性和查询效率。 然后&#xff0c;我整理一份关于答题小程序的数据库设计方案。 1. 数据库设计原则 &#xff08;1&#xff09;规范化&#xff1a;确保数据表的设计遵循数据库规范化原则&…

想要在本地生活服务平台赚钱?赶紧了解这些秘籍!

当前&#xff0c;由于本地生活的市场前景不断展现和各大官方平台在本地生活服务商申请、考核方面等多方面要求的持续收紧&#xff0c;本地生活服务平台的搭建逐渐成为了许多创业者首选入局途径&#xff0c;与之相关的本地生活服务平台的盈利点更是因此成为了他们最关心的话题。…

揭秘五大无线领夹麦克风常见智商税:选购时务必多注意!

​随着内容创作和自媒体的兴起&#xff0c;越来越多的人开始关注音频设备的选择&#xff0c;尤其是对无线领夹麦克风的需求日益增长。我们了解到&#xff0c;不少用户在选择过程中会遇到困难&#xff0c;所以接下来要为大家揭晓的是目前无线领夹麦克风行业中比较常见的几个智商…

HIEE451116R0001控制器可议价

HIEE451116R0001控制器可议价 HIEE451116R0001控制器可议价 HIEE451116R0001控制器可议价 HIEE451116R0001控制模块接线图 HIEE451116R0001控制模块电路图 HIEE451116R0001控制模块中文手册 HIEE451116R0001自动化控制是一种通过利用控制理论、仪器仪表、计算机和其他信息…

气膜馆:运动场上的清凉新选择—轻空间

随着气膜结构技术的不断进步&#xff0c;越来越多的运动场馆采用了气膜结构&#xff0c;不仅因为其灵活性和可移动性&#xff0c;还因为它能为运动员和观众提供一个舒适的运动环境。许多人关心在气膜场馆中运动是否会感到闷热&#xff0c;然而事实正相反&#xff0c;现代气膜场…

如何用Java SpringBoot+Vue搭建七彩云南文化旅游网站?

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Lesson 71 He‘s awful!

Lesson 71 He’s awful! 词汇 awful a. 让人讨厌的&#xff0c;坏的&#xff0c;令人恶心的 相关&#xff1a;bad a. 坏的    terrible a. 糟糕的 例句&#xff1a;他是个让人恶心的男孩。    He is an awful boy.    这本书很差。    This book is terrible. t…

书生大模型实战营-进阶关卡-2-Lagent 自定义你的 Agent 智能体

输入&#xff1a;帮我搜索一下 MindSearch 添加自定义自己的智能体 导入相关包 输入&#xff1a;请帮我生成一幅水墨风格的杭州西湖 效果还可以。

Java项目集成RocketMQ

文章目录 1.调整MQ的配置1.进入bin目录2.关闭broker和namesrv3.查看进程确认关闭4.编辑配置文件broker.conf&#xff0c;配置brokerIP15.开放端口109116.重新启动1.进入bin目录2.启动mqnamesrv和mqbroker1.启动 NameServer 并将输出重定向到 mqnamesrv.log2.**启动 Broker 并将…

PLC常用知识框架V1.0

在工控领域&#xff0c;PLC程序作为软件控制核心&#xff0c;地位很重要&#xff0c;但阅读理解程序&#xff0c;也是一个困难的事。 常在网上看到互联网行业的程序员吐槽祖传代码&#xff0c;其实PLC程序也差不多&#xff0c;由于PLC程序受时间&#xff0c;客户需求&#xff…

高云代理商| 一文看懂FPGA芯片选型!

一、FPGA简介&#xff1a; FPGA诞生于1984年&#xff0c;是一种特殊的逻辑芯片&#xff0c;属于半定制化、可编程芯片。它允许用户可以随时定义芯片的硬件功能。通过开放芯片内部的逻辑块、连线、I/O 等资源给用户配置&#xff0c;使得同一片 FPGA 既可以在 5G 的基站实现信道…

监控电脑屏幕的软件叫什么?6款超值的电脑屏幕监控软件推荐!

数字化转型的大背景下&#xff0c;企业对于员工的工作效率和行为规范提出了更高的要求。 为了确保员工的工作效率以及保护公司的数据安全&#xff0c;电脑屏幕监控软件逐渐成为企业管理的重要工具之一。 本文将为大家介绍五款超值的电脑屏幕监控软件&#xff0c;帮助企业更好地…

Linux 离线安装docker和docker-compose

前言 公司有 docker 和 docker-compose 离线包安装部署的需求&#xff0c;本文应运而生撰写时间&#xff1a;2024-06-07&#xff08;初稿&#xff09; 1 应用版本 docker&#xff1a;20.10.7, build f0df350docker-compose&#xff1a;1.25.1 2 物料准备 服务器账号/密码d…

即插即用,效率远超ControlNet!贾佳亚团队重磅开源ControlNeXt:超强图像视频生成方法

文章链接&#xff1a;https://arxiv.org/pdf/2408.06070 git链接&#xff1a;https://github.com/dvlab-research/ControlNeXt 项目链接&#xff1a;https://pbihao.github.io/projects/controlnext/index.html 亮点直击 提出了ControlNeXt&#xff0c;这是一种强大且高效的图像…

Spring Boot实现定时任务

目录 1.什么是定时任务2.Timer的使用3.Spring Task的使用Api说明配置类启用定时任务支持配置定时任务多线程&#xff08;异步&#xff09;定时任务 1.什么是定时任务 定时任务是指在预定的时间点或按照特定的时间间隔自动执行的任务。 定时任务的应用场景&#xff1a; 操作系…

系统调用学习29

#include<iostream> #include<signal.h> #include<unistd.h> #include<vector> // 定义信号屏蔽常量 #define BLOCK_SIGNAL 2 #define MAX_SIGNUM 31// 定义需要屏蔽的信号数组 int sigarr[]{2,3,4}; // 展示当前线程未处理的信号状态 static void sho…

TortoiseGit修改差异查看器为BeyondCompare

1. TortoiseGit修改差异查看器 比较文件&#xff1a;”C:\Program Files\Beyond Compare 4\BComp.exe” %base %mine /title1%bname /title2%yname /leftreadonly差异文件&#xff1a;”C:\Program Files\Beyond Compare 4\BCompare.exe2. TortoiseGit修改合并工具 解决冲突&…

【嵌入式开发之网络编程】TCP端口和UDP端口

目录 网络端口的定义及作用 运输层的作用 运输层的两个主要协议 用户数据报协议UDP (User Datagram Protocol) 传输控制协议TCP (Transmission Control Protocol) 运输层的端口及分类 按照端口号分类 按照协议类型分类 BSD端口 网络端口的定义及作用 在网络技术中…

低代码平台的优势与挑战:现代开发的革新之路

在数字化转型的浪潮中&#xff0c;低代码平台&#xff08;Low-Code Platforms&#xff09;成为了开发者和企业的重要工具。低代码平台通过可视化界面和拖拽式功能&#xff0c;简化了应用程序的开发过程&#xff0c;使得即使是没有编程背景的用户也能够构建功能丰富的应用。然而…

ubuntu18.04下安装nvidia3090显卡驱动

前言&#xff1a;之前安装过4090的显卡&#xff0c;但是是使用20.04直接在第三方驱动里面安装的&#xff0c;这回使用的是18.04&#xff0c;版本估计是21年以前的&#xff0c;附加驱动直接没有&#xff0c;整整卡了两天&#xff0c;最后再查询多篇资料后最终安装好&#xff0c;…