设计模式《七》——装饰模式

线性回归LinearRegression 对视频中线性回归算法的相关内容进行总结与记录 文章目录一、理论基础二、实例2.1 一元线性回归2.1.1 推导过程2.1.2 代码实现(基于numpy)2.1.3 代码实现(基于sklearn)2.2 多元线性回归2.2.1 代码实现(基于numpy)2.2.2 代码实现(基于sklearn) 一、理论基础 回归 通常是指利用某个函数,尽可能把数据样本点“串”在一起,用于描述输入变量和输出变量间的变化关系 线性回归 特点:用来把数据“串”起来的那个函数是线性的 (一元线性回归(一个自变量) &a. 阅读详情

简介

顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。

角色与职责

Component:抽象接口,可以给这些对象动态地增加职责。

ConcreteComponent:Component的具体对象,也可以对这个对象添加一下职责。

Decorator:装饰抽闲类,继承自Component,从Decorator的继承类来扩展component的功能。

ConcreteDecorator:具体的装饰对象。

 

实现

#include <iostream>
using namespace std;
class Car {
public:
    Car() {}
    virtual void show() = 0;
};
class RunCar : public Car{
public:
    RunCar() {}
    virtual void show(){
        cout << "可以跑" << endl;
    }
};
class SwimRunCar : public Car{
public:
    SwimRunCar(Car* car){
        m_car = car;
    }
    void swim() {
        cout << "可以游" << endl;
    }
    virtual void show(){
        m_car->show();
        swim();
    }
private:
    Car* m_car;
};
class FlyRunCar : public Car {
public:
    FlyRunCar(Car* car) {
        m_car = car;
    }
    void fly() {
        cout << "可以飞" << endl;
    }
    virtual void show() {
        m_car->show();
        fly();
    }
private:
    Car* m_car;
};
int main(int argc, char* argv[]) {
    Car* car = NULL;
    car = new RunCar;
    car->show();
    SwimRunCar* swimRunCar = new SwimRunCar(car);
    swimRunCar->show();
    FlyRunCar* flyRunCar = new FlyRunCar(swimRunCar);
    flyRunCar->show();
    cin.get();
    return 0;
}

 

补充

代理模式与装饰模式的区别:

 

       这两个图可能使我们产生困惑。这两个设计模式看起来很像。对装饰器模式来说,装饰者(decorator)和被装饰者(decoratee)都实现同一个 接口。对代理模式来说,代理类(proxy class)和真实处理的类(real class)都实现同一个接口。此外,不论我们使用哪一个模式,都可以很容易地在真实对象的方法前面或者后面加上自定义的方法。

        然而,实际上,在装饰器模式和代理模式之间还是有很多差别的。装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模 式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。

        我们可以用另外一句话来总结这些差别:使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造。   

Linux下离线安装Google Chrome 目录背景一、下载并安装Google Chrome二、下载并安装依赖包1.libvulkan.so.1()(64bit)2.读入数据总结 背景 项目中服务器被要求不能连接外网,不能直接联网安装,所以需要下载Google Chrome安装包和依赖包,然后离线安装。 linux下步骤都一样,不管ubuntu还是centos只是需要下载对应系统的文件包即可。 本机系统:CentOS 7 一、下载并安装Google Chrome 官方下载地址http://www.google.cn/chrome/browser/d 阅读详情

相关推荐

Zotero搭配CNKI.js插件:一键批量下载知网文献的完整教程(附常见问题解决)

本文提供Zotero搭配CNKI.js插件实现知网文献批量下载的完整教程。详细介绍了从环境准备、插件安装到实战操作的全流程,并针对常见问题提供解决方案,旨在帮助科研人员高效构建自动化文献管理工作流,显著提升文献收集与整理效率。

e4f5g6h7的博客 1203

设计模式(七)装饰模式

装饰模式是结构型设计模式之一,不必改变类文件和使用继承的情况下,动态地扩展一个对象的功能,是继承的替代方案之一。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

Android进阶三部曲 - 刘望舒 5058

主升浪潜伏主图指标公式 提前潜伏,持仓待涨,通达信炒股指标公式

浙江世宝,第一次出现信号2022年6月1日,当日冲高回落,收涨3.48%,随后涨涨突破前高,回踩后出现第二次主升潜伏信号,时间2022年6月13日,当日收涨9.46%,后市连续涨停,走出12连板行情。九安医疗,第一次出现信号,黄色文字,当日2021年11月1日,涨幅0.19%,第二次出现信号一字涨停,没机会买进,第三次是T字,需要手快,后市连续上涨,接近20倍的大牛股。启明信息,突破区间后的回踩转涨位置出现信号,时间2021年11月29日,当日涨幅1.14%,次日爆发,波段涨幅152.65%。

weixin_69760830的博客 1880

【设计模式】【七】装饰模式

1.装饰模式简介装饰模式介绍装饰模式是结构型设计模式之一,不必改变类文件和使用继承的情况下,动态地扩展一个对象的功能,是继承的替代方案之一。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。定义动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。装饰模式结构图 Component:抽象组件,给对象动态的添加职责。 ConcreteComponent:组件具体实现类。

帅胖子的博客 662

Three.js 完整实战项目:构建一个 3D 商品展示空间

Three.js 作为强大的 WebGL 框架,广泛应用于交互式 3D 场景开发,尤其适合创建沉浸式商品展示空间。本文将通过一个完整的实战项目,展示如何构建一个 3D 商品展示空间,涵盖项目架构、资源组织、多模型切换、交互热点绑定、移动端适配和帧率优化。项目以展示虚拟商品(如家具或电子产品)为核心,结合用户交互,基于 Vite、TypeScript 和 Tailwind CSS,支持 ES Modules,确保响应式布局,遵循 WCAG 2.1 可访问性标准。本文适合希望通过综合项目掌握 Three.js

zimin的专栏 1464

使用lighttpd和开发板进行交互

本文介绍了如何在嵌入式开发板上使用Lighttpd Web服务器实现硬件交互功能。主要内容包括:Lighttpd通过CGI程序间接控制硬件的基本原理;lighttpd.conf配置文件的详细解析;开发板文件目录结构设计;用C语言编写控制GPIO的CGI程序示例;网页调用CGI实现按钮触发控制的HTML代码;常见问题调试建议。最后通过效果图展示了网页按钮点击后成功控制LED灯的实际效果,验证了Lighttpd+CGI方案在嵌入式设备Web控制中的可行性。

m0_49476241的博客 1424

设计模式七:装饰模式

一、什么是装饰模式 装饰(Decorator)模式又叫做包装模式,是结构型模式之一。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案 二、装饰模式的特点 可以层层装饰,十分方便使用。io流使用的最多。 三、装饰模式的角色和职责 抽象组件角色:一个抽象接口,是被装饰类和装饰类的父接口 具体组件角色:为抽象组件的实现类 抽象装饰角色:包含一个组件的引用,并...

神韵 266

基于深度学习的活体人脸检测系统:YOLOv5、YOLOv6、YOLOv7、YOLOv8实现与UI界面设计

本博客详细介绍了如何基于YOLOv5、YOLOv6、YOLOv7、YOLOv8模型实现一个完整的活体人脸检测系统。系统包括数据集准备、模型训练、UI界面设计以及实时检测功能的实现。通过YOLO系列模型的应用,我们能够高效、准确地进行人脸检测和活体验证。未来,随着YOLOv9和其他新一代目标检测模型的出现,我们可以进一步提高检测精度和速度。此外,集成更多的传感器数据(如深度传感器、红外线传感器)可以使活体检测系统更加安全和稳定。

YOLO 541

Java设计模式解析之七——装饰模式

装饰模式1.前言2.特点2.1.代码说明2.2.优缺点2.2.使用场景3.总结 1.前言 设计模式共有23种,根据目的准则分类,分为三类 创建型设计模式,共5种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 结构型设计模式,共7中:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、响元模式。 行为设计模式,共11种:策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 这里介绍一下装饰模式。

fanhenghao的博客 196

(11-3-01 )

以太坊(Ethereum)是一种基于区块链技术的开源平台和加密货币。它于2015年由Vitalik Buterin和Gavin Wood等开发者创建,并成为比特币之后最受欢迎的加密货币之一。以太坊不仅支持加密货币交易,还为开发者和企业提供了构建去中心化应用程序的强大工具。在本节的内容中,将实型一个完整的机器学习模型项目,智能检测出以太坊区块链中的非法账户。从问题定义到模型建立和评估,再到最终的总结和建议。本实例突出了处理类别不平衡问题的重要性,并展示了如何使用多种机器学习算法来解决实际问题。此外,通过数据可

码农三叔 2170

★教程3:Simulink学习教程入门60例目录

1.订阅本教程用户可以免费获得本博任意1个(包括所有免费专栏和付费专栏)博文对应代码;2.本Simulink课程的所有案例(部分理论知识点除外)均由博主编写而成,供有兴趣的朋友们自己订阅学习使用。未经本人允许,禁止任何形式的商业用途;3.本课程除了介绍常见的Simulink模块介绍之外,我们更侧重于各种实例的完整设计介绍。从通信,控制器,图像处理,语音处理,电力系统等诸多常用领域介绍了相关案例,如果对于某个较为复杂的案例,初学者无法正确复现,也可以私信博主获得完整Simulink模型文件。

FPGA/MATLAB学习教程/源码/项目合作开发 1万+

设计模式(七)之装饰模式

装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。 下图为其结构图: 四个主要角色分别为: 抽象构件(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对象。 具体构件(ConCreteComponent)角色:定义一个将要接受附加责任的类。 装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口...

camellia的博客 278

【100%通过率】华为od机试C卷【出差 / 员工派遣】C++ 实现

某公司部门需要派遣员工去国外做项目。现在,代号为 x 的国家和代号为 y 的国家分别需要 cntx 名和 cnty 名员工部门每个员工有一个员工号 (1,2,3,......),工号连续,从 1开始。部长派遣员工的规则:

MISAYAONE的博客 2194

AspectJ实现设计模式(七)—装饰模式

本文介绍使用AspectJ实现设计模式之装饰模式,文章利用一个打印发票的例子说明如何使用AspectJ来实现装饰模式。 示例说明       装饰模式是大家都很熟悉的一个模式,最典型的例子就是Java的I/O库,它的设计完全按照装饰模式。我们通常在客户端使用new操作符来对一个类进行包装,例如下述代码DataOutputStream out=new DataOutputStream

starchu1981的专栏 1475

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

设计模式之七—装饰模式(Decorator Pattern)

装饰模式是一种结构型设计模式,它动态地将责任附加到对象上。装饰模式提供了比继承更有弹性的替代方案,用于扩展对象的功能。装饰模式提供了一种灵活的替代继承的方式,通过组合对象来扩展功能。需要动态、透明地给对象添加职责需要避免使用继承导致的类爆炸问题需要遵循开闭原则,在不修改现有代码的情况下扩展功能在Java中,装饰模式被广泛应用于I/O流处理、GUI组件装饰等场景。正确使用装饰模式可以提高代码的灵活性和可维护性,但也需要注意避免过度使用导致的系统复杂性增加。

技术交流,一起进步 677

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JAVA设计模式(七)——装饰模式

1、设计原则: 1. 多用组合,少用继承。 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。 2. 类应设计的对扩展开放,对修改关闭。

ljtyzhr的专栏 694

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

简述设计模式(七)——装饰模式

为何使用装饰模式 在软件开发过程中,当对系统扩展功能时,希望复用当前系统中已存在现存组件,并对其进行动态扩展以实现新功能。此时,在不修改现存组件的情况下,同时对这些组件进行复用扩展。 举个例子,手机本身具备照相功能,但画质感人,爱美的人都希望在拍照的同时具有美化效果,因此,扩展出滤镜、瘦脸等功能。针对这个例子,来看看是否采用装饰模式的方式之间的区别: 不采用装饰模式; 重复创建类,会导致类爆炸;...

風逍遥 334

设计模式-装饰模式(七)

简介 在实现一个类的方法时,额外的增加一些功能 这类看似和代理模式的工程相同,在最后会讲解两者的差异 主要模块 抽象构件 具体构件 抽象装饰 具体装饰 例子 抽象构件 //吃饭 public interface EatAble { //吃这个方法 void eat(); } 具体构件 //家里吃饭 public class House implements EatAble {...

civil2java的博客 156

Java设计模式(七)----装饰模式

装饰模式 一、概述 二、装饰模式的结构 三、具体案列 四、装饰模式与类继承的区别 五、装饰模式的特点: 六、装饰模式、适配器模式、代理模式区别 一、概述1.装饰模式(Decorator)的定义:又名包装(Wrapper)模式,装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案

至道 1099

java常用设计模式七:装饰模式

一、概念 装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为。 基本角色: 抽象构件:它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法,它的引入可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作。 具体构件:它是抽象构件类的子类,用于定义具体的构件对象,实现了在抽象构件中声明的方法,装饰器可以给它增加额外的职责(方法...

weixin_30393907的博客 77

设计模式(七):装饰模式

装饰模式的使用场景以及代码实现,清晰易懂

weixin_43791996的博客 274

浅谈Java设计模式(七)装饰模式(Decorator)

前言: 顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能,代码如下: public interface Sourceable { public void method();

比较喜欢、笑的博客专栏 7251

设计模式(七)——装饰模式

定义 Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending functionality 动态地给一个对象添加一些额外的职责,就增

luotuomianyang的博客 499

设计模式(七):装饰模式

总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 本篇文章学习结构型模式中的装饰模式

代码搬运工 427
上一篇: 设计模式《六》——代理模式
下一篇: Linux Cgroups详解
sampson MrLiang
博客等级 码龄19年 127粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值