装饰器模式

装饰器模式详解 1.简介 上班族大多都有睡懒觉的习惯,每天早上上班时间都很紧张,于是很多人为了多睡一会,就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式。 在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以采用装饰器模式来实现。 2.定义 装饰器(Decorato 阅读详情

装饰器模式

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类

介绍

意图:

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

主要解决:

  • 一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀

何时使用:

  • 在不想增加很多子类的情况下扩展类

如何解决:

  • 将具体功能职责划分,同时继承装饰者模式

关键代码:

  • Component 类充当抽象角色,不应该具体实现
  • 修饰类引用和继承 Component 类,具体扩展类重写父类方法

应用实例:

优点:

  • 装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能

缺点:

  • 多层装饰比较复杂

使用场景:

  • 扩展一个类的功能
  • 动态增加功能,动态撤销

注意事项:

  • 可代替继承

实现

我们将创建一个 Shape 接口和实现了 Shape 接口的实体类。然后我们创建一个实现了 Shape 接口的抽象装饰类ShapeDecorator,并把 Shape 对象作为它的实例变量。RedShapeDecorator 是实现了 ShapeDecorator 的实体类。DecoratorPatternDemo,我们的演示类使用RedShapeDecorator 来装饰 Shape 对象
在这里插入图片描述

  1. 创建一个接口
    //Shape.java
    public interface Shape {
       void draw();
    }
  1. 创建实现接口的实体类
    //Rectangle.java
    public class Rectangle implements Shape {

       @Override
       public void draw() {
          System.out.println("Shape: Rectangle");
       }
    }

    //Circle.java
    public class Circle implements Shape {

       @Override
       public void draw() {
          System.out.println("Shape: Circle");
       }
    }
  1. 创建实现了 Shape 接口的抽象装饰类
    //ShapeDecorator.java
    public abstract class ShapeDecorator implements Shape {
       protected Shape decoratedShape;

       public ShapeDecorator(Shape decoratedShape){
          this.decoratedShape = decoratedShape;
       }

       public void draw(){
          decoratedShape.draw();
       }
    }
  1. 创建扩展了 ShapeDecorator 类的实体装饰类
    //RedShapeDecorator.java
    public class RedShapeDecorator extends ShapeDecorator {

       public RedShapeDecorator(Shape decoratedShape) {
          super(decoratedShape);
       }

       @Override
       public void draw() {
          decoratedShape.draw();
          setRedBorder(decoratedShape);
       }

       private void setRedBorder(Shape decoratedShape){
          System.out.println("Border Color: Red");
       }
    }
  1. 创建扩展了 ShapeDecorator 类的实体装饰类
  //DecoratorPatternDemo.java
   public class DecoratorPatternDemo {
      public static void main(String[] args) {

         Shape circle = new Circle();
         ShapeDecorator redCircle = new RedShapeDecorator(new Circle());
         ShapeDecorator redRectangle = new RedShapeDecorator(new Rectangle());
         //Shape redCircle = new RedShapeDecorator(new Circle());
         //Shape redRectangle = new RedShapeDecorator(new Rectangle());
         System.out.println("Circle with normal border");
         circle.draw();

         System.out.println("\nCircle of red border");
         redCircle.draw();

         System.out.println("\nRectangle of red border");
         redRectangle.draw();
      }
   }
深入理解Java中的装饰者模式Demo 装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许用户在不修改现有对象的结构的情况下,动态地添加新的行为到对象中。这种模式通过创建一个装饰类来包裹原有的类,并在装饰类中添加新的功能,以此来扩展对象的功能。接口在Java中是一种引用类型,它定义了类或者对象必须遵循的规则,但不提供具体实现。在装饰者模式中,接口允许装饰器和具体组件拥有共同的方法集合,从而可以被透明地互相替换。接口是一系列方法的集合,它是完全抽象的,不包含任何实现代码。 阅读详情

相关推荐

5分钟搞定微服务架构图:手把手教你用Draw.io画出专业级设计

本文详细介绍了如何使用Draw.io快速绘制专业级微服务架构图。通过5分钟入门教程,掌握核心组件拖拽、连接线优化等技巧,提升系统设计可视化效率。特别适合需要快速呈现分布式系统架构的开发团队,利用内置微服务元素和分层展示功能,轻松创建清晰易懂的技术文档。

pz890123的博客 1245

装饰器设计模式-代码演示demo

代码演示: demo1:模拟扩音器,放大声音 model实体: package com.charis.io.model; /** * 声音 实体类 * @author Charis */ public class Voice { // 声音大小 private Integer size; public Voice(Integer size) { this.size = size; } public Integer getSize() {

qq_45042013的博客 436

一文了解英伟达(NVIDIA)所有显卡芯片

英伟达(NVIDIA)的产品线庞杂繁复,从面向游戏玩家的GeForce RTX系列,到数据中心的H100、B200,再到Jetson、DRIVE等边缘智能平台,一般人很难以厘清其全貌。这篇文章将用通俗而专业的语言,一文打通英伟达显卡芯片体系,让你彻底读懂这个GPU帝国是如何运转的。

bjdx_001的博客 6378

【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)

所谓装饰器模式其实就是在原有的功能上做一个增强!!换句话说:以前你妈妈揍你的时候用的巴掌,但是你妈妈为了增强伤害性,于是在手上拿了一根木棍,同样的力度,同样是在打你,造成的伤害不一样,木棍带来的就是增强效果!你妈妈可以在木棍和巴掌之间来回切换武器,这个木棍就是装饰器!!

令狐_JackieHao的博客 776

Fofa API高阶玩法:用Python批量获取漏洞资产(含OA系统扫描实战)

本文详细介绍了如何利用Python结合Fofa API实现自动化漏洞资产收集的高阶实战技巧。通过构建健壮的客户端、设计精准查询语法、实现多线程批量采集,并以OA系统漏洞扫描为例,演示了从资产发现、过滤验证到报告生成的全流程,旨在提升安全运维与应急响应的效率。

weixin_28607671的博客 501

基于物联网设计温室水培系统(NBIOT+华为云IOT)_338

本项目设计并实现了一套基于物联网的温室水培系统。系统以STM32F103RCT6单片机为核心控制器,结合SHT30温湿度传感器、SGP30二氧化碳传感器、BH1750光照传感器及液位检测传感器等硬件,实现对温室内环境参数的实时采集。系统支持自动和手动两种控制模式,能够根据传感器数据自动控制补光灯、通风风扇、遮光卷帘、降温水帘及营养液补充电机。通过NBIoT模块,系统可将采集的数据通过MQTT协议上传至华为云IOT平台,用户可通过Android手机APP或Windows上位机进行远程监控与控制。

415

架构师的修养3.1 建造者、装饰、适配器、代理模式

建造者模式 将复杂对象的构建和表示分类,隐藏了复杂对象的构建过程,动态创建具有复合属性的对象。 优点: 具体的建造者之间互相独立,利于系统扩展,不影响其他模块 客户端不必知道内部组成细节 缺点: 建造的产品有较多共同点,组成部分相似 使用场景 隔离复杂对象的创建和使用,相同的方法,不同执行顺序,产生不同事件结果 多个部件都可以装配到一个对象中,但产生的运行结果不相同 产品类非常复杂或者产品类因为调用顺序不同而产生不同作用 初始化一个对象时,参数过多,或者很多参数具有默认值 Builder模式不适合创建差异性

绿浪的成长 189

基于SSD2828和STM32的MIPI显示屏驱动系统设计与实现

在硬件层面,需要将STM32、SSD2828和MIPI显示屏连接起来。STM32与SSD2828的连接:通过SPI接口连接STM32和SSD2828,用于配置和控制SSD2828。SSD2828与MIPI显示屏的连接:通过MIPI DSI接口连接SSD2828和MIPI显示屏,用于传输显示数据。

qq_38334677的博客 7151

装饰器模式demo

装饰器模式

奔跑的菜鸡 304

毕设帮扶:从0到1搭建基于YOLOv5的打架斗殴检测系统——助你搞定深度学习毕设

做完这个毕设,你已经掌握了从数据准备到模型部署、界面开发的全流程。把模型部署到边缘设备(如安防摄像头的嵌入式系统)上,实现本地化实时检测与报警;加入行为严重程度分析(如轻微推搡 vs 严重斗殴)、涉事人员数量统计,让系统从“检测”升级为“智能安防决策”;尝试融合声音、红外等多模态数据,打造全方位的暴力事件监测系统。按照这个教程一步步做,你的毕设肯定能做得很扎实。要是过程中遇到啥问题,别担心,慢慢梳理或者咱们一起聊聊,一定能把这个毕设做成你满意的作品。

LXY_LOVE36的博客 123

Allegro如何用自带的功能将线段变成铜皮操作指导

在做PCB设计的时候,有时根据设计需要将线段变成铜皮,可以借助辅助工具来实现这一操作,但是Allegro自身也自带这个功能,如下图。勾选Delete original objects。如何用自带的功能将线段变成铜皮操作指导。勾选Convert to shape,需要把这段走线变成铜皮。

weixin_54787054的博客 2947

设计模式 | 九、装饰器模式(与继承的区别,与适配器/代理的区别)[DecoratorPattern]

设计模式-装饰器模式:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

GiraffePeng的博客 4954

YOLO系列算法改进 | 自研篇 | C3k2融合Circulant Attention注意力模块 | 给局部特征提取器装上了全局动态卷积核,兼顾效率、精度与泛化能力!| AAAI 2026

YOLO系列算法改进 | 自研篇 | C3k2融合Circulant Attention注意力模块 | 给局部特征提取器装上了全局动态卷积核,兼顾效率、精度与泛化能力!| AAAI 2026 (以YOLO26最新目标检测模型为基础,融合C3k2_Circulant创新模块改进Backbone)

2502_91881744的博客 242

设计模式 - 学习笔记 - 装饰器模式DecoratorPattern

设计模式 - 学习笔记 - 装饰器模式原理分析应用场景优劣分析好处限制UML代码示例 原理分析 装饰嘛就是在毛坯上加功能呗。 装饰器中包含一个属性用来保存毛坯。 装饰器把毛坯的方法全重写一遍,通常就直接调毛坯原来的方法即可。然后按需要添加新方法来装饰毛坯。 为了规范,毛坯和装饰器都通过实现接口来创建。 是不是觉得继承就可以搞定的事?之所以脱裤子放这个屁就是为了把继承关系改为组合关系达到降低耦合度的目的。 应用场景 优劣分析 好处 限制 UML 代码示例 ...

灵台方寸山斜月三星洞 579

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

设计模式之装饰器模式

1装饰器模式 1.1装饰器模式定义 装饰器模式(Decorator Pattern),也叫包装模式 Wrapper Pattern 是指在不改变原有对象的基础之上,将功能附加到对象上.提供了比继承更灵活的替代方法 属于结构型模式.

qq_40665874的博客 2220

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

c++实现装饰器模式

一、定义 装饰器模式(DecoratorPattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。   使用情况:如果需要添加新功能,但又不想修改定义好的接口或者抽象类,此时适合用装饰模式。   应用场景举例:例如对于一个蛋糕Cake类,一开始是一个原始蛋糕模型,后面需要给蛋糕加工—加上奶油,加上巧克力,加上瓜子仁,加上水果,写上字等。等同于将原始蛋糕作为一个Cake类,我们

小拳头的博客 3815

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

装饰器模式(DecoratorPattern)

基本介绍:    装饰器模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。示例代码:package org.brando; /** * * 类说明: 测试类 * @author Brando 2018年3月29日 下午2:03:59 */ public class Launcher { pu...

BrandoLv 282

Java设计模式——装饰器模式

简要叙述java设计模式装饰器模式,并进行代码的示例

tang_seven的博客 4925

JS设计模式之装饰器模式

在这个图片里面,ceshi函数this原本是指向window的,当我给他绑定到inp上的时候,function谁调用指向那个对象,此时ceshi输出的this就是input这个dom元素,同理,假如我有一个按钮,正常这个按钮的功能是当我点击他的时候,进行一个页面的跳转,但是现在我想给这个按钮加一个功能,就是让它跳转前,去上传一些数据。所以整体执行顺序为,在点击之前,我们使用装饰器模式给render添加了新功能,log,当我们点击按钮的时候,其实触发的函数,就是新的render.

MRDONG1的博客 1925

java模式之装饰器模式

java设计模式之装饰器模式

J_Newbie的博客 4093

Java—装饰器模式

装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许你动态地将行为添加到现有的对象中,而无需修改其代码。装饰器模式提供了比继承更灵活的功能扩展方式。// ConcreteComponent 被装饰者@Override// Decorator 装饰者 (增强)@Override@Override// 简单的模拟加密逻辑@Override。

qq_56725871的博客 2130

装饰器模式介绍

装饰器模式就是动态的给一个对象添加一些额外的职责。就扩展功能而言,装饰器模式提供了一种比使用子类更加灵活的替代方案。在软件设计中,装饰器模式是一种用于替代继承的技术,它通过一种无须定义子类的方式给对象动态的增加职责,使用对象之间的关联关系取代类之间的继承关系。今天我们就来介绍下装饰器设计模式。

qq_25409421的博客 1211
上一篇: 组合模式
下一篇: 外观模式
炒栗子不加糖
博客等级 码龄10年 68粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值