0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

演示装饰器模式的用法

冬至子 来源:码农架构 作者:小智 2023-06-08 11:16 次阅读

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。

结构图

图片

角色与理解

  • 装饰模式共分为四种角色:
  • Component (抽象构件):具体构件与抽象装饰类的共同父类,声明具体构件中实现的业务方法,它的出现能够让客户端一致的透明的对待装饰前和装饰后的类
  • ConcreteComponent (具体构件):抽象构件的子类,实现具体的业务方法
  • Decorator (抽象装饰类):抽象构件的子类,内部维持一个抽象构件的引用,通过该引用调用具体构件的业务方法
  • ConcreteDecorator (具体装饰类):抽象装饰类的实现类,声明并实现各种装饰方法实现对具体构件的装饰
  • 具体构件和装饰具体构件的抽象装饰类通过注入的方式被抽象装饰类继续装饰
  • 因为具体构件和抽象装饰类都继承抽象构件,所以被装饰时可以被同样的对待,更加灵活

核心代码

  • 抽象组件

图片

  • 具体构件

图片

  • 抽象装饰类

图片

  • 具体装饰类

图片

  • 客户端

图片

注意事项

  • 尽量保持装饰类与被装饰类的接口相同,确保在客户端调用时能够被一致对待
  • 被装饰类尽量是一个“轻”类,较少的职能,通过装饰类对其进行扩展
  • 如果具体构件类只有一个,那么抽象装饰类可以直接是具体构件类的子类
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • pattern
    +关注

    关注

    0

    文章

    6

    浏览量

    9582
收藏 人收藏

    评论

    相关推荐

    SeaORM的基础用法

    可读性。 在本教程中,我们将介绍SeaORM的基本用法和进阶用法。我们将使用SQLite数据库来演示这些用法。 基础用法 在使用SeaORM
    的头像 发表于 09-19 14:37 1422次阅读

    基于Rust语言Hash特征的基础用法和进阶用法

    ,包括Hash trait、HashMap、HashSet等,本教程将详细介绍Rust语言Hash特征的基础用法和进阶用法。 基础用法 使用Hash trait 在Rust语言中,Hash trait
    的头像 发表于 09-19 16:02 735次阅读

    Rust的 match 语句用法

    执行不同的代码,这在处理复杂的逻辑时非常有用。在本教程中,我们将深入了解 Rust 的 match 语句,包括基础用法、进阶用法和实践经验等方面。 基础用法 match 语句是 Rust 中的一种控制流语句,它可以让我们根据不同
    的头像 发表于 09-19 17:08 656次阅读

    定时的基本用法是什么

    定时是单片机里非常重要的一个模块,必须熟练掌握,本篇按这样的顺序展开:一、简单介绍定时二、定时基本用法三、定时高级使用技巧(linu
    发表于 07-16 09:01

    请问Mini51的PHCHG 和PHCHGNXT用法和PWM要设定为什么模式?

    我想用Mini51的换相寄存PHCHG 和下一相寄存PHCHGNXT做BLDC驱动, 请问以上两个寄存中各位的详细用法和PWM要设定为怎么模式
    发表于 08-23 07:25

    OpenHarmony装饰指定自定义组件:@BuilderParam装饰

    引入了@BuilderParam装饰,@BuilderParam用来装饰指向@Builder方法的变量,开发者可在初始化自定义组件时对此属性进行赋值,为自定义组件增加特定的功能。该装饰
    发表于 09-27 16:02

    装饰工程

    装饰工程  考试了解一般抹灰、装饰抹灰的质量要求。熟悉饰面工程、、吊顶工程、隔墙工程、涂料与刷浆工程的施工工艺、施工要点与施工质量验收标准及检测方法
    发表于 03-16 10:38 31次下载

    巧制机壳装饰面板

    巧制机壳装饰面板
    发表于 09-10 14:50 319次阅读
    巧制机壳<b class='flag-5'>装饰</b>面板

    适配器模式装饰模式、代理模式的区别

    适配器模式装饰模式、代理模式都属于设计模式中的结构型模式,结构型设计
    发表于 10-18 15:53 1.6w次阅读
    适配器<b class='flag-5'>模式</b>、<b class='flag-5'>装饰</b>器<b class='flag-5'>模式</b>、代理<b class='flag-5'>模式</b>的区别

    适配器模式装饰模式的区别

    装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。在计算机编程中,适配器模式(有时候也称包装样式或者包
    发表于 01-15 10:31 6165次阅读
    适配器<b class='flag-5'>模式</b>和<b class='flag-5'>装饰</b><b class='flag-5'>模式</b>的区别

    Python:装饰器的原理和案例

    Python中的装饰器用于扩展可调用对象的功能,而无需修改其结构。基本上,装饰器函数包装另一个函数以增强或修改其行为。我们可以通过一个具体的例子了解基础知识!让我们编写一个包含装饰器实现示例的Python3代码。
    的头像 发表于 07-01 11:35 2017次阅读

    GoF给装饰模式的定义

    的源码,就会发现 middleware 功能的实现用的就是装饰模式(Decorator Pattern)。
    的头像 发表于 06-29 10:22 585次阅读

    嵌入式C语言软件设计之装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern),是结构型设计模式的一种,装饰模式允许向一个现有的对象添加新的功能,而又不改变其对象结构,
    发表于 03-01 10:55 250次阅读

    装饰模式和代理模式的区别

    什么是装饰模式 装饰模式(Decorator Pattern): 在不改变对象自身的基础上,在程序运行期间给对象动态的添加职责; 感觉和继承如出一辙,不改变父类,子类可拓展功能;
    的头像 发表于 10-08 14:25 497次阅读
    <b class='flag-5'>装饰</b>器<b class='flag-5'>模式</b>和代理<b class='flag-5'>模式</b>的区别

    如何写一个简单的装饰

    今天介绍的是一个已经存在十三年,但是依旧不红的库 decorator,好像很少有人知道他的存在一样。 这个库可以帮你做什么呢 ? 其实很简单,就是可以帮你更方便地写python装饰器代码,更重
    的头像 发表于 11-01 09:54 269次阅读
    如何写一个简单的<b class='flag-5'>装饰</b>器