设计模式 --3:装扮模式
结构图

代码
#include<iostream>using namespace std;class person {
public:person() {};person(string name) { this->name = name; }virtual void show() {cout << "装扮的:" << this->name << endl;}
private:string name;
};
//装饰类 用来装饰人
class Finery : public person
{
public:void Decorate(person * component){this->component = component;}virtual void show() override{if (this->component != nullptr){this->component->show();}}protected:person *component = nullptr;
};//具体装饰
class T_short :public Finery
{
public:void show()override{cout << "T恤上衣" << endl;Finery::show();}
};
//破洞裤
class jeansrawhem :public Finery
{
public:void show()override{cout << "破洞裤" << endl;Finery::show();}
};
//豆豆鞋
class Beanie_shoes :public Finery
{
public:void show()override{cout << "豆豆鞋" << endl;Finery::show();}
};int main()
{person *xm = new person("小明");Finery *fx = new Finery();T_short* ts = new T_short();jeansrawhem* js = new jeansrawhem();Beanie_shoes* bs = new Beanie_shoes();fx->Decorate(xm);ts->Decorate(fx);js->Decorate(ts);bs->Decorate(js);bs->show();return 0;
}
总结
- 装饰模式 就是为已有功能添加更多功能的一种方式
- 当我们需要新的功能的时候 如果要往最开始的功能类里面添加新的功能 无疑会给原来的主类增加复杂度 而装饰模式会给每一个需要装饰功能单独设置一个类 我们需要那些类就去装载那些类
- 因此更方便的添加和删除功能 而不用去修改主类代码 把类中的装饰功能移除出去 可以简化原有的类
- 但是需要注意装饰的顺序问题 最理想的是保持类的相互独立 比如把每一个装饰的地方划分一个功能 上衣 裤子 鞋 之类的 让这些装饰类同时只能有一个单独的功能(西装上衣 体恤上衣 或者 卫衣)
相关文章:
设计模式 --3:装扮模式
结构图 代码 #include<iostream>using namespace std;class person { public:person() {};person(string name) { this->name name; }virtual void show() {cout << "装扮的:" << this->name << endl;} private:string name; }; //装…...
element-plus中的表单校验
1. 简单校验: 1.1 在script中给出校验规则对象,主要属性名与form对象的属性名一致1.2 一个字段的校验规则可以有多个,值是一个数组,数组中的一个对象就是一条校验规则1.3 主要校验规则: 1.3.1 required:是…...
ros小问题之roslaunch tab补不全新增的功能包
在学习Gazebo这一章节时,通过catkin_create_pkg命令创建了仿真机械臂所需的软件包,创建完成后里面的内容直接拷贝了教材配套的文件,但在roslaunch时,摁tab键补不全新加的包。 重新source catkin_ws/devel/setup.bash不起作用&…...
C#常见的.Net类型(二)
目录 一、在集合中存储多个对象理解集合的选择1.列表2.字典3.堆栈4.队列5.集 二、使用Span、索引和范围Span索引范围 处理类型和属性1.特性2.创建自定义特性3.反射 一、在集合中存储多个对象 处理集合的常见类型 类型描述List动态大小的数组,可以按索引访问Dictio…...
oracle临时表空间不释放
项目报错 nested exception is java.sql.SQLException: ORA-01652: unable to extend temp segment by 128 in tablespace TEMP 原因是临时表空间满了,临时表空间一直增长,未释放导致临时表空间使用率100%。 查询临时表空间使用率 --临时表空间利用率…...
Chapter 13 Techniques of Design-Oriented Analysis: The Feedback Theorem
Chapter 13 Techniques of Design-Oriented Analysis: The Feedback Theorem 从这一章开始讲负反馈Control系统和小信号建模. 13.2 The Feedback Theorem 首先介绍 Middlebrook’s Feedback Theorem 考虑下面负反馈系统 传输函数 Guo/ui G ( s ) u o u i G ∞ T 1 T G…...
科研学习|论文解读——美国政治经济中的权力:网络分析(JASIST, 2019)
论文原题目 Power in the U.S. political economy: A network analysis 摘要 美国政治经济的许多特征产生于大型政治和经济机构之间的互动,然而我们对它们的互动性质和这些机构之间的权力分配知之甚少。在本文中,对总部设在美国的组织的网络进行了详细的…...
常用的git命令
一、常用的git命令 1. 配置 git config --local user.name "xxx" ---仅对当前Git仓库有效。配置信息将保存在当前Git仓库的 .git/config 文件中 local优先级最高,会覆盖其他范围的相同配置 git config --global user.email "xxx" ---全局…...
【AI】用iOS的ML(机器学习)创建自己的AI App
用iOS的ML(机器学习)创建自己的AI App 目录 用iOS的ML(机器学习)创建自己的AI App机器学习如同迭代过程CoreML 的使用方法?软件要求硬件开始吧!!构建管道:设计和训练网络Keras 转 CoreML将模型集成到 Xcode 中结论推荐超级课程: Docker快速入门到精通Kubernetes入门到…...
远程调用初体验笔记
远程调用初体验笔记 微服务架构通常将系统拆分成多个独立的服务单元,每个服务单元都专注于实现特定的业务功能。当一个服务需要使用另一个服务提供的功能时,就可以通过远程调用来实现。 使用步骤 1.步骤 Spring给我们提供了一个RestTemplate工具&#…...
反无人机电子护栏:原理、算法及简单实现
随着无人机技术的快速发展,其在航拍、农业、物流等领域的应用日益广泛。然而,无人机的不规范使用也带来了安全隐患,如侵犯隐私、干扰航空秩序等。为了有效管理无人机,反无人机电子护栏技术应运而生。 目录 一、反无人机电子护栏…...
Java项目利用Redisson实现真正生产可用高并发秒杀功能 支持分布式高并发秒杀
Java中的高并发秒杀场景下我们可以使用redisson来实现高并发秒杀功能, 以下就是一个可用于生产环境的高并发秒杀示例代码: pom依赖 <!-- https://mavenlibs.com/maven/dependency/org.redisson/redisson --><dependency><groupId>org.redisson</groupId&…...
0104行列式的性质-行列式-线性代数
记 D ∣ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋯ ⋯ ⋯ a n 1 a n 2 ⋯ a n n ∣ D\begin{vmatrix}a_{11}&a_{12}&\cdots &a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\cdots&\cdots&&\cdots\\a_{n1}&a_{n2}&\cdots&a_{nn}\en…...
k8s HPA 自动伸缩机制 (配置,资源限制,)
目录 一、概念 核心概念 工作原理 HPA 的配置关键参数 关键组件 使用场景 注意事项 如何确保程序稳定和服务连续 二、metrics-server 部署 metrics-server 准备 metrics-server 镜像: 使用 Helm 安装 metrics-server: 配置 metrics-server: 安装 metrics-server: …...
vulhub中GIT-SHELL 沙盒绕过漏洞复现(CVE-2017-8386)
GIT-SHELL 沙盒绕过(CVE-2017-8386)导致任意文件读取、可能的任意命令执行漏洞。 测试环境 为了不和docker母机的ssh端口冲突,将容器的ssh端口设置成3322。本目录下我生成了一个id_rsa,这是ssh的私钥,连接的时候请指…...
SpringBoot+vue3打造企业级一体化SaaS系统
SpringBootvue3打造企业级一体化SaaS系统 简介: 全面提升前后端技术水平,独立完成全栈项目开发能力,快速进击全栈工程师,最终在面试中脱颖而出。整合后端主流技术(Spring Boot、物理数据库隔离、加载动态权限、多…...
探讨TCP的可靠性以及三次握手的奥秘
🌟 欢迎来到 我的博客! 🌈 💡 探索未知, 分享知识 !💫 本文目录 1. TCP的可靠性机制1.2可靠性的基础上,尽可能得提高效率 2. TCP三次握手过程3. 为何不是四次握手? 在互联网的复杂世界中,TCP&am…...
openai常见的两个错误:BadRequestError和OpenAIError
错误1:openai.OpenAIError: The api_key client option must be set either by passing api_key..... 在通过openai创建客户端必须要设置api key,如果你事先已经在本机的环境中设置未起效可以手动设置,注意手动设置时不要用下面的形式 import openai f…...
2核4g服务器够用吗?
2核4G服务器够用吗?够用。阿腾云以2核4G5M服务器搭建网站为例,5M带宽下载速度峰值可达640KB/秒,阿腾云以搭建网站为例,假设优化后平均大小为60KB,则5M带宽可支撑10个用户同时在1秒内打开网站,并发数为10&am…...
数据仓库数据分层详解
数据仓库中的数据分层是一种重要的数据组织方式,其目的是为了在管理数据时能够对数据有一个更加清晰的掌控。以下是数据仓库中的数据分层详解: 原始数据层(Raw Data Layer):这是数仓中最底层的层级,用于存…...
ViGEmBus驱动全攻略:解锁游戏控制新可能
ViGEmBus驱动全攻略:解锁游戏控制新可能 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 1. 驱动异常诊断:从现象到本质的定位方法 当…...
VLA模型实战避坑指南:从RT-1到Octo,如何为你的机器人选对架构?
VLA模型实战避坑指南:从RT-1到Octo的架构选型方法论 当机械臂需要根据"把红色积木放在蓝色盒子左侧"的指令完成操作时,工程师面临的第一个决策往往不是算法调参,而是选择哪种VLA(Vision-Language-Action)架…...
Halcon点云拼接实战:如何用特征模板搞定3D扫描缺失问题?
Halcon点云拼接实战:特征模板技术在工业3D扫描中的应用 在工业检测和逆向工程领域,3D扫描常常面临一个棘手问题——单次扫描无法完整捕获复杂物体的所有表面细节。想象一下,当您需要检测一个汽车发动机缸体的内部结构,或者重建一…...
万象视界灵坛部署教程:阿里云ECS+Docker一键部署开源多模态感知平台
万象视界灵坛部署教程:阿里云ECSDocker一键部署开源多模态感知平台 1. 项目概述 万象视界灵坛(Omni-Vision Sanctuary)是一款基于OpenAI CLIP技术的高级多模态智能感知平台。它将复杂的语义对齐技术转化为直观的像素风格交互体验࿰…...
数字人开发新范式:Fay-UE5虚拟交互引擎零基础实战指南
数字人开发新范式:Fay-UE5虚拟交互引擎零基础实战指南 【免费下载链接】fay-ue5 项目地址: https://gitcode.com/gh_mirrors/fa/fay-ue5 在数字内容创作与智能交互需求爆发的当下,开发者面临三大核心挑战:如何快速构建高逼真度虚拟形…...
终极Illustrator脚本合集:10个免费工具彻底改变你的设计工作流
终极Illustrator脚本合集:10个免费工具彻底改变你的设计工作流 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是否曾经在Adobe Illustrator中花费数小时重复执行相同…...
ClearerVoice-Studio语音分离实用技巧:分离后各声道说话人身份标注方法
ClearerVoice-Studio语音分离实用技巧:分离后各声道说话人身份标注方法 你是不是也遇到过这种情况?用语音分离工具把一段多人对话音频分成了几个独立的声道,结果看着一堆命名为“output_1.wav”、“output_2.wav”的文件,完全搞不…...
ESP32-S3摄像头实战:按键触发拍照与SD卡自动存储方案
1. ESP32-S3摄像头项目核心价值与应用场景 当你手头有一块ESP32-S3开发板和摄像头模块时,最直接的冲动可能就是做个能拍照的小设备。但要把这个想法落地,需要解决三个关键问题:如何稳定触发拍摄?拍完的照片存哪里?怎么…...
【微信小程序更新机制全解析】原理、实践与最佳实践
前言 微信小程序的更新机制,是连接开发者版本迭代与用户体验的核心桥梁。它设计的核心逻辑是**“自动无感更新为主,手动强制更新为辅”,在保证小程序快速启动、稳定可用**的前提下,尽可能让用户使用最新版本;同时为开…...
5步打造高效工作流:Super Productivity开源工具新手实战指南
5步打造高效工作流:Super Productivity开源工具新手实战指南 【免费下载链接】super-productivity Super Productivity is an advanced todo list app with integrated Timeboxing and time tracking capabilities. It also comes with integrations for Jira, GitL…...
