GOF 23设计模式之 装饰模式(Decorator)

【华为OD】华为性格测试(综合测试)高分策略 1、性格测试非常重要,是一次否决制,18 个月有效期,所以态度一定要认真对待,不要随便乱选;2、做题原则:正向原则,积极乐观向上3、时间为 25-30 分钟,会频繁出现重复选项重复出现的题目注意一致性。 阅读详情

职责:

  • 动态的为一个对象增加新的功能
  • 装饰模式是一种代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。

实现细节:

这里写图片描述
- Component抽象构件角色
- 真实对象和装饰对象有相同的接口。这样,客户端对象就能够以与真实对象相同的方式同装饰对象交流。
- ConcreteComponent 具体构建角色(真实对象):
- IO流中的FileInputStream FileOutputStream
- Decorator装饰角色:
- 持有一个抽象构件的引用。装饰对象接受所有客户端的请求,并把这些请求转发给真实的对象。这样,就能在真实对象的调用前后增加新的功能。
- ConcreteDecorator具体装饰角色:
- 负责给构件对象增加新的责任

开发中使用的场景:

  1. IO中输入流和输出流的设计
  2. Swing包中图形界面的构件功能
  3. Servlet API中提供了一个request对象的Decorator设计模式的默认实现类HttpServletRequestWrapper, HttpServletRequestWrapper类,增强了request对象的功能。
  4. Struts2 中,request,response,session对象的处理

总结

  • 装饰模式(Decorator)也叫包装器模式(Wrapper)
  • 装饰模式降低系统的耦合度,可以动态的增加或删除对象的职责,并使得需要装饰的具体构建类和具体装饰类可以独立变化,以便增加新的具体构建类和具体装饰类。

优点

  • 扩展对象功能,比继承灵活,不会导致类个数的急剧增加
  • 可以对一个对象进行多次装饰,创造出不同行为的组合,得到功能更加强大的对象。
  • 具体构建类和具体装饰类可以独立变化,用户可以根据需要自己增加新的具体构建子类和具体装饰子类。

缺点

  • 产生很多小对象。大量小对象占据内存,一定程度上影响性能。
  • 装饰模式容易出错,调试排查比较麻烦。

装饰模式和桥接模式的区别:

  • 两个模式都是为了解决过多子类对象的问题。但是他们的诱因不一样。桥接模式是对象自身现有机制沿着多个维度变化,是既有部分不稳定。装饰模式是为了增加新的功能。

一种代码实现

package com.coderbean.decorator;

/**
 * Created by Chang on 15/10/1.
 */
public class Client {
    public static void main(String[] args) {
        Car car = new Car();
        car.move();
        System.out.println();
        ICar newCar = new FlyCar(car);
        newCar.move();
        System.out.println();
        new WaterCar(car).move();
        System.out.println();
        new AICar(newCar).move();
        System.out.println();

        new AICar(new FlyCar(new WaterCar(new Car()))).move();
    }
}
package com.coderbean.decorator;

/**
 * 抽象组件
 * Created by Chang on 15/9/30.
 */
public interface ICar {
    void move();
}

//ConcreteComponent 具体构件角色(真实对象)
class Car implements ICar {
    @Override
    public void move() {
        System.out.println("陆地上跑");
    }
}
//Decorator装饰角色
class SuperCar implements ICar {
    private ICar car;

    public SuperCar(ICar car) {
        this.car = car;
    }

    @Override
    public void move() {
        car.move();
    }
}

//ConcreteDecorator具体装饰角色
class FlyCar extends SuperCar {
    public FlyCar(ICar car) {
        super(car);
    }

    public void Fly(){
        System.out.println("在天上飞");
    }

    @Override
    public void move() {
        super.move();
        Fly();
    }
}

class WaterCar extends SuperCar {
    public WaterCar(ICar car) {
        super(car);
    }

    public void swim(){
        System.out.println("水中游");
    }

    @Override
    public void move() {
        super.move();
        swim();
    }
}

class AICar extends SuperCar {
    public AICar(ICar car) {
        super(car);
    }

    public void autoMove(){
        System.out.println("自动驾驶!");
    }

    @Override
    public void move() {
        super.move();
        autoMove();
    }
}




6.10华为OD机试真题 新系统 - 查找温度记录统计信息 (Java/Py/C/C++/Js/Go) 6.10华为OD机试真题 新系统 - 查找温度记录统计信息 (Java/Py/C/C++/Js/Go) 阅读详情

相关推荐

IBTrACS v04r01 数据提取实战:Pandas 筛选 JTWC/CMA/JMA 3机构最佳路径数据

本文详细介绍了如何使用 Pandas 高效提取和处理 IBTrACS v04r01 数据集中的最佳路径数据,特别针对 JTWC、CMA 和 JMA 三家权威机构的数据进行对比分析。通过构建可复用的数据提取函数,解决多机构数据质量差异问题,并提供高级分析与可视化应用示例,助力热带气旋研究。

clijovtbq401783153的博客 515

GOF 设计模式 Decorator模式 笔记

Decorator(装饰) 意图:动态的给一个对象添加一些额外的职责。就添加功能来说,Decorator模式相比生成子类更为灵活 结构图: 在以下情况适合使用 在不影响其他对象的情况下,以动态,透明的方式给单个对象添加职责 处理那些可以撤销的职责 当不能采用生成子类的方法进行扩充时,一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是,类定义被隐藏,或类定义不能用于生成子类。 实现: 就添加功能,扩展父类来说,装饰模式要比继承要灵活,而且可以有

zjj_daniu的博客 325

Claude Code 接入 DeepSeek-V4 教程

本文介绍Claude Code的安装配置流程:1) 安装Node.js 18+和Git(Windows);2) 通过npm全局安装@anthropic-ai/claude-code;3) 配置DeepSeek API环境变量(需替换API Key);4) 启动Claude Code或配置VSCode插件。重点包括Linux/macOS和Windows的环境变量设置方法,以及VSCode插件的settings.json配置项。完成配置后即可在终端或VSCode中使用Claude Code功能。

培根芝士的专栏 2003

GOF23式——Decorator

  意图: 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。   动机:  

计算机技术交流 233

Spring AI + RAG 构建电商智能客服:从 PDF 文档解析到精准问答的全链路实战

核心框架:向量数据库:- PostgreSQL + pgvector (生产推荐)- Redis Stack (轻量级方案)- ChromaDB (快速原型)文档解析:- Apache PDFBox: PDF 文本提取- Spring AI Document Readers: 结构化解析大模型:- 阿里云百炼 (DashScope)- 本地部署:Qwen/ChatGLM/*** 电商领域实体*/@Data@Builder@ToString/*** 商品类型。

一起修行,不孤单。这里有编程语言、开发工具、学习方法论和踩坑笔记。用简单的话说复杂的事,陪你从小白到进阶。周更干货,欢迎一起成长! 381

低成本实现webhook接收端[python]

Webook本质上也是API,只不过是反向调用,即前端不主动发送请求,完全由后端推送。简单来说,Webhook是一个接受HTTP POST或是GET,PUT,DELETE的URL,一个实现了Webhook的API提供商就是在当事件发生的时候会向配置的URL发送信息,与请求-响应式不同,使用Webhook可以实时接收到变化。Ps:Webhook可能会发出大量的请求,确保接受的URL不被泄露或者应用能及时处理这些请求。

锡城小凯的博客 1万+

Decorator装饰者模式 - GoF设计模式(二)

本文总结了GoF设计模式中的Decorator模式

小李飞刀的专栏 582

PaddleOCR多进程GPU推理实战:200万图片高效处理方案

本文详细介绍了PaddleOCR多进程GPU推理在高效处理200万张图片OCR任务中的实战方案。通过优化GPU利用率、多进程并发和关键参数调优,实现了从单进程3000张/小时到8进程3万张/小时的性能飞跃,为大规模OCR处理提供了可靠解决方案。

prometheus9mon的博客 261

GOF23设计模式之装饰模式之理解

 装饰模式i:(decorator)      职责:动态的微一个对象增加新的功能。      装饰模式是一种用于代替继承的技术,无须通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,避免了类型体系的快速膨胀。      实现细节:          Component抽象构件角色:         

不当初 659

Java8动态生成SFunction:基于字段名的Lambda表达式实践

本文深入探讨了在Java8中如何基于字段名动态生成SFunction,以解决MyBatis Plus的LambdaQueryWrapper在动态查询场景下的局限性。通过核心原理LambdaMetafactory的解析和手把手的代码实现,展示了如何将字符串字段名转换为类型安全的Lambda表达式,从而实现真正动态、类型安全的查询条件构建与通用数据处理,显著提升代码的灵活性与安全性。

sss66的博客 952

13《CAN总线五种错误类型,故障判定全解析》

CAN总线规定,发送节点在发送完EOF字段后,会留出一个ACK Slot(应答槽)。这个槽里,发送节点自己会输出隐性电平(逻辑1),然后“期待”至少有一个其他节点在这个槽里把它拉成显性电平(逻辑0)。如果这个槽结束时仍然是隐性电平,发送节点就判定:刚才那帧报文,没有任何一个节点成功接收——这就是应答错误。简单说,就是“我喊了一嗓子,却没人应声”。

2401_88858637的博客 264

复习:GoF的23种设计模式之Decorator模式(结构型)

Decorator模式(装饰、修饰) 定义:一种动态地往一个类中添加新地行为(功能)的设计模式。装饰模式相比生成子类更灵活,这样可以给某个对象而不是整个类添加一些功能。 Decorator模式和Composite模式很类似,都是实现容器与内容、装饰与被装饰的一致性,可以再次查看文章:复习:GoF的23种设计模式之Composite模式(结构型)。Decorator模式实现类继承再编译时增加行为...

yingqi的博客 307

大模型的应用与微调:如何调用 LLM?从 OpenAI API 到本地部署

本篇文章介绍了如何调用 OpenAI、DeepSeek、Manus、通义千问等大模型 API,并探讨了 LLM 本地部署的方法。在实际应用中,可以根据需求选择云端 API 或本地化部署方案,以满足不同的计算需求和隐私要求。下一篇:大模型微调与 RAG 技术(LoRA、QLoRA、向量数据库)

晴天彩虹雨的博客 1157

GOF23设计模式之装饰模式(decorator)

一、装饰模式概述   (1)动态的为一个对象增加新的功能。   (2)装饰模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。     使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。 二、装饰模式实现细节   (1)Componen 抽象构件角色:      真实对象和装饰对象有相同的接口。这样,客户端就能够以真实对象相同的方...

dcpvpf6917的博客 224

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

GOF23设计模式——装饰模式(Decorator)

标题装饰模式(Decorator) 主要代码结构 public interface ICar { void move(); } class Car implements ICar{ @Override public void move() { System.out.println("车子在陆地上跑"); } } class SuperCa...

技术分享记录 251

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

GOF23设计模式-结构型模式5-装饰模式(Decorator)

GOF23设计模式-结构型模式5-装饰模式(Decorator)

Tumbler 325

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

[导入]C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构型模式).zip(9.84 MB)...

讲座内容: 本培训课程探讨GoF23之Decorator 装饰模式的意图、动因、原理、应用场景与C#语言实现,以及该模式在.NET框架程序设计中的具体应用。 课程讲师: 李建忠 上海祝成信息科技有限公司 高级培训讲师 MSDN特邀讲师 .NET技术专家,C++/CLI 专栏作家。南京邮电学院毕业,历任程序员,高级程序员,开发主管。现为上海祝成科技软件架构师,高级培训讲师。译著Microso...

weixin_30760895的博客 69

结构型模式总结

                       结构型模式总结 GoF23种设计模式中结构型设计模式有7种,分别是: Adapter适配器模式、 Bridge桥接模式、 Composite组合模式、 Decorator装饰模式、 Facade外观模式、 Flyweight享元模式 和 Proxy代理模式。 设计模式 GoF的描述 理解 ...

jangta的专栏 141

结构型设计模式

转自:http://www.cnblogs.com/kid-li/archive/2006/11/11/557359.html 结构型设计模式是从程序的结构上解决模块之间的耦合问题(好像是句废话),GoF23种设计模式中结构型设计模式有7种,分别是:Adapter适配器模式、Bridge桥接模式、Composite组合模式、Decorator装饰模式、Facade外观模式、Flyweight享元模

Mr.Steven 专注于Java 211

Java23种设计模式(GOF)——装饰模式

装饰模式(decorator)职责实现细节案例使用场景总结和桥接模式区别 职责 动态的为一个对象增加新的功能。 装饰模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。 实现细节 Component抽象构建角色: 真实对象和装饰对象有相同的接口。这样,客户端对象就能够以与真实对象相同的方式同装饰对象交互。 IO流中的InputStream、OutputStream、Reader、Writer Concret

ozhi的博客 162

【C#设计模式】8.装饰模式(Decorator Pattern)【结构型】

1.1 动机(Motivate) 在房子装修的过程中,各种功能可以相互组合,来增加房子的功用。类似的,如果我们在软件系统中,要给某个类型或者对象增加功能,如果使用“继承”的方案来写代码,就会出现子类暴涨的情况。比如:IMarbleStyle是大理石风格的一个功能,IKeepWarm是保温的一个接口定义,IHouseSecurity是房子安全的一个接口,就三个接口来说,House是我们房子,我们的房子要什么功能就实现什么接口,如果房子要的是复合功能,接口不同的组合就有不同的结果,这样就导致我们子类膨胀严重,.

星Yeah 的博客 2895

GoF23种设计模式之结构型模式之装饰模式

一、概述         动态地给一个对象添加一些额外的职责。装饰模式比生成子类更为灵活。 二、适用性 1.在不影响其他对象的情况下,以动态、透明的方式给但个对象添加职责。 2.处理那些可以撤销的职责。 3.当不能采用生成子类的方式进行扩展的时候。 三、参与者 1.Component:定义一个对象接口,可以给这些对象动态地添加职责。 2.ConcreteComponent:定义一个

leverli的专栏 1890

23种设计模式的通俗解释

GOF23种设计模式简介 GoF(“四人帮”,指Gamma, Helm, Johnson & Vlissides, Addison-Wesley四人)提出的23种设计模式可谓经典,由于其定义比较严谨趋于理论化,故刚开始不一定很快掌握,下面简要对23种设计模式予以简要介绍,并给出现实中相关的通俗易懂的事例: 一、23种设计模式 Abstract Factory 抽象工厂模式—...

曾昌的博客 1066

Java GoF 23种设计模式-结构型模式-装饰器模式(Decorator Pattern)

文章目录一、模式定义二、模式动机三、模式结构四、代码实现 一、模式定义 装饰模式(Decorator Pattern) :动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活。其别名也可以称为包装器(Wrapper),与适配器模式的别名相同,但它们适用于不同的场合。根据翻译的不同,装饰模式也有人称之为“油漆工模式”,它是一种对象结构型模式。 二、模式动机 一般有两种方式可以实现给一个类或对象增加行为: 继承机制,使用继承机制是给现有类添加功

WU4566285的博客 391

设计模式之装饰模式

装饰模式(decorator) Component抽象构件角色: 真实对象和装饰对象有相同的接口。这样,客户端对象就能够以与真实对象相同的方式同装饰 对象交互。 – ConcreteComponent 具体构件角色(真实对象): 比如:io流中的FileInputStream、FileOutputStream Decorato...

anisni的博客 226

设计模式之装饰模式(Decorator)摘录

设计模式之装饰模式(Decorator)摘录!

网络资源是无限的 2332
上一篇: GOF 23设计模式之 组合模式(composite)
下一篇: GOF 23设计模式之 外观模式 迪米特法则
coderbean
博客等级 码龄11年 12粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值