当前位置: 首页 > news >正文

【设计模式】4.装饰器模式

装饰器模式,就是动态的给一个对象增加一些职责。

UML

在这里插入图片描述

code

#include "3.h"int main()
{// 有点类似于压栈的感觉, 显示人名 + 装饰1 + 装饰2 + 装饰3 => 输出 装饰321的人Person* person = new Person("syc");Tshrit* tshrit = new Tshrit();tshrit->decorate(person);Shoes* shoes = new Shoes();shoes->decorate(tshrit);Tie* tie = new Tie();tie->decorate(shoes);tie->show();return 0;
}
#pragma once
#include <string>
#include <iostream>
// 形象类
class ICharacter
{
public:virtual void show() = 0;
private:
};// 人
class Person : public ICharacter
{
public:Person(const std::string& name) : name(name) {}void show() override{std::cout << "装扮的" << this->name;}
private:std::string name;
};// 装饰类
class Decorator : public ICharacter
{
public:void decorate(ICharacter* character){this->character = character;}void show() override{character->show();}protected:ICharacter* character;
};// Tshrit
class Tshrit : public Decorator
{
public:void show() override{std::cout << "T Shrit";Decorator::show();}
private:
};// 鞋子
class Shoes : public Decorator
{
public:void show() override{std::cout << "鞋子";Decorator::show();}
};// 领带
class Tie : public Decorator
{
public:void show() override{std::cout << "领带";Decorator::show();}
};
http://www.dtcms.com/a/312382.html

相关文章:

  • 2025-0803学习记录21——地表分类产品的精度验证
  • Github怎么只下载某个目录文件?(Git稀疏检出、GitZip for Github插件、在线工具DownGit)Github下载目录
  • linux2.6 和 unix-v6 源码实验
  • Nginx相关实验(2)
  • 【2025/08/03】GitHub 今日热门项目
  • C# LINQ(LINQ to XML)
  • CAP 理论笔记
  • CUDA杂记--nvcc使用介绍
  • GitHub 趋势日报 (2025年08月02日)
  • 控制建模matlab练习07:比例积分控制-③PI控制器的应用
  • 深入掌握 ExcelJS:Node.js 中强大的 Excel 操作库
  • 小红书开源dots.ocr:单一视觉语言模型中的多语言文档布局解析
  • WebRTC前处理模块技术详解:音频3A处理与视频优化实践
  • ⭐CVPR2025 3D 生成新框架|Kiss3DGen 让 2D 扩散模型玩转 3D 资产生成
  • sqli-labs:Less-26关卡详细解析
  • 【数据迁移】Windows11 下将 Ubuntu 从 C 盘迁移到 D 盘
  • Spring Boot 的事务注解 @Transactional 失效的几种情况
  • MCU中的复位生成器(Reset Generator)是什么?
  • 智能手表项目:原理图
  • kotlin kmp 跨平台环境使用sqldelight
  • Shell脚本-变量如何定义
  • webrtc弱网-QualityScaler 源码分析与算法原理
  • npm ERR! code CERT_HAS_EXPIRED:解决证书过期问题
  • `npm error code CERT_HAS_EXPIRED‘ 问题
  • Azure DevOps — Kubernetes 上的自托管代理 — 第3部分
  • JVM-垃圾回收器与内存分配策略详解
  • Node.js 服务可以实现哪些功能
  • 【python实用小脚本-169】『Python』所见即所得 Markdown 编辑器:写完即出网页预览——告别“写完→保存→刷新”三连
  • 深度学习周报(7.28~8.3)
  • 【机器学习③】 | CNN篇