c++装饰器模式

前言

装饰器模式,就是可以对一个对象无限装饰一些东西,而且可以没有顺序。比如一个人可能只会说出他的名字,但是可以让他再说哈哈,可以说完哈哈之后再说哇哇。如何后面又不想装饰了,不需要改类原来的代码,直接在客户端不装饰即可;同样如果增加新的装饰,添加一个具体的装饰类即可,也不需要改变原来的代码。

代码

Person.h

#pragma once
#include<string>
#include<iostream>class Person // 定义一个接口
{
public:virtual void show() = 0;
};class NormalPerson : public Person // 实现接口的具体类,可能有不同种类的人,他们的show()操作不同
{
private:std::string _name;public:NormalPerson(std::string name):_name(name){ }~NormalPerson() {}virtual void show() override {std::cout << "normal person: " << _name << std::endl;}
};class PersonDecrator : public Person
{
private:Person* _pPerson;public:PersonDecrator(Person* p_person) :_pPerson(p_person) {}virtual void show() override {if (_pPerson != nullptr) {_pPerson->show();}else {			std::cout << "_pPerson is nullptr" << std::endl;}}
};// 装饰了haha的person
class DecratedHaHaPerson : public PersonDecrator
{
public:DecratedHaHaPerson(Person* p_person):PersonDecrator(p_person){}virtual void show() override{PersonDecrator::show(); // 调用父类方法hahaShow(); // 调用子类独有的haha show() 方法}void hahaShow() {std::cout << "hahahahaha" << std::endl;}
};// 装饰了wawa的person
class DecratedWaWaPerson : public PersonDecrator
{
public:DecratedWaWaPerson(Person* p_person) :PersonDecrator(p_person) {}virtual void show() override{PersonDecrator::show(); // 调用父类方法wawaShow(); // 调用子类独有的haha show() 方法}void wawaShow() {std::cout << "wawawawawa" << std::endl;}
};

main.cpp

#include"Person.h"int main()
{Person* pHablee = new NormalPerson("hablee");std::cout << "没有装饰任何的hablee的show: " << std::endl;pHablee->show();std::cout << std::endl;// 装饰一下hahapHablee = new DecratedHaHaPerson(pHablee);std::cout << "装饰了haha的hablee的show" << std::endl;pHablee->show();std::cout << std::endl;// 再装饰一个wawapHablee = new DecratedWaWaPerson(pHablee);std::cout << "装饰了haha和wawa的hablee的show" << std::endl;pHablee->show();std::cout << std::endl;delete pHablee;return 0;
}

结果

在这里插入图片描述

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

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

相关文章

VB.NET—窗体引起的乌龙事件

目录 前言: 过程: 总结: 升华: 前言: 分享一个VB.NET遇到的一个问题&#xff0c;开始一直没有解决&#xff0c;这个问题阻碍了很长时间&#xff0c;成功的变成我路上的绊脚石&#xff0c;千方百计的想要绕过去&#xff0c;但事与愿违怎么也绕不过去&#xff0c;因为运行不了…

基于白冠鸡算法的无人机航迹规划-附代码

基于白冠鸡算法的无人机航迹规划 文章目录 基于白冠鸡算法的无人机航迹规划1.白冠鸡搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用白冠鸡算法来优化无人机航迹规划。 1.白冠鸡…

Linux实现简易shell

文章目录 &#x1f984;0. shell&#x1f42e;1. 交互及获取命令行&#x1f437;2. 解析命令行&#x1f42f;3. 执行命令行&#x1f405;3.1 普通命令&#x1f405;3.2 内建命令 &#x1f981;4. 主函数逻辑及演示 本章代码gitee仓库&#xff1a;简易shell &#x1f984;0. she…

K8S知识点(二)

&#xff08;1&#xff09;K8S概念 K8S是通过控制pod来控制容器进而控制程序的 service是沟通Pod和外键的桥梁&#xff0c;可以实现负载均衡的效果&#xff0c;加权负载的效果 &#xff08;2&#xff09;环境搭建-环境规划 &#xff08;3&#xff09;环境搭建-主机安装 使用…

C++ 代码实例:并查集简单创建工具

文章目录 前言代码仓库代码说明main.cppMakefile 结果总结参考资料作者的话 前言 C 代码实例&#xff1a;并查集简单创建工具。 代码仓库 yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (gitee.com) 代码 说明 简单地创建并查集注…

<Vue>使用依赖注入的方式共享数据

什么是vue依赖注入&#xff1f; Vue是一个用于构建用户界面的渐进式框架。 它提供了一种简单而灵活的方式来管理组件之间的数据流&#xff0c;即依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;。 依赖注入是一种设计模式&#xff0c;它允许一个组件从另一…

HTTPS的加密方式超详细解读

在了解https的加密方式之前&#xff0c;我们需要先行了解两个特别经典的传统加密方式&#xff1a; 1、对称加密 1.1、定义 需要对加密和解密使用相同密钥的加密算法。所谓对称&#xff0c;就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解…

【技术干货】开源库 Com.Gitusme.Net.Extensiones.Core 的使用

目录 1、项目介绍 2、为项目添加依赖 3、代码中导入命名空间 4、代码中使用 示例 1&#xff1a;string转换 示例 2&#xff1a;object转换 1、项目介绍 Com.Gitusme.Net.Extensiones.Core是一个.Net扩展库。当前最新版本1.0.4&#xff0c;提供了常见类型转换&#xff0c…

<蓝桥杯软件赛>零基础备赛20周--第4周--杂题-1

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…

统计学习方法 条件随机场

文章目录 统计学习方法 条件随机场随机场马尔可夫随机场定义因子分解 条件随机场定义参数化形式简化形式矩阵形式 概率预测问题前向-后向算法概率的计算期望值的计算 学习问题改进的迭代尺度法拟牛顿法 解码问题 统计学习方法 条件随机场 学习李航的《统计学习方法》时&#x…

ok-解决qt5发布版本,直接运行exe缺少各种库的问题

已实验第二种方法可用。 工具&#xff1a;电脑必备、QT下的windeployqt Qt 官方开发环境使用的动态链接库方式&#xff0c;在发布生成的exe程序时&#xff0c;需要复制一大堆 dll&#xff0c;如果自己去复制dll&#xff0c;很可能丢三落四&#xff0c;导致exe在别的电脑里无法…

C++11 智能指针学习笔记

非常棒的学习博客 在C中没有垃圾回收机制&#xff0c;必须自己释放分配的内存&#xff0c;否则就会造成内存泄露。 1. shared_ptr 共享智能指针是指多个智能指针可以同时管理同一块有效的内存&#xff0c;共享智能指针 shared_ptr 是一个模板类。智能指针的核心实现技术是引用…