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

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

3天内不再提示

演示装饰器模式的用法

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

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

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

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

结构图

图片

角色与理解

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

核心代码

  • 抽象组件

图片

  • 具体构件

图片

  • 抽象装饰类

图片

  • 具体装饰类

图片

  • 客户端

图片

注意事项

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

    关注

    0

    文章

    6

    浏览量

    9633
收藏 人收藏

    评论

    相关推荐

    理解Python装饰及其工作原理

    Python 是一种对新手很友好的语言。但是,它也有很多较难掌握的高级功能,比如装饰(decorator)。很多初学者一直不理解装饰及其工作原理,在这篇文章中,我们将介绍
    发表于 10-08 11:39 2216次阅读

    SeaORM的基础用法

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

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

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

    定时的基本用法是什么

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

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

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

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

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

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

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

    Python:装饰的原理和案例

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

    GoF给装饰模式的定义

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

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

    装饰模式(Decorator Pattern),是结构型设计模式的一种,装饰
    发表于 03-01 10:55 412次阅读

    在Python中装饰的使用

    定义 首先我们先来了解下装饰的定义。顾名思义,在Python中,装饰本质上就是一个函数,它可以接收一个函数作为参数,然后返回一个新的函数。这个新的函数可以在执行原有函数之前或之后,
    的头像 发表于 06-21 16:54 747次阅读

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

    什么是装饰模式 装饰模式(Decorator Pattern): 在不改变对象自身的基础上,
    的头像 发表于 10-08 14:25 3861次阅读
    <b class='flag-5'>装饰</b><b class='flag-5'>器</b><b class='flag-5'>模式</b>和代理<b class='flag-5'>模式</b>的区别

    Python自制简单实用的日志装饰

    在写代码的时候,往往会漏掉日志这个关键因素,导致功能在使用的时候出错却无法溯源。 其实,只需要写一个非常简单的日志装饰,我们就能大大提升排查问题的效率。 1.简陋版装饰 写一个
    的头像 发表于 10-21 14:39 724次阅读
    Python自制简单实用的日志<b class='flag-5'>装饰</b><b class='flag-5'>器</b>

    Python 自制简单实用的日志装饰

    在写代码的时候,往往会漏掉日志这个关键因素,导致功能在使用的时候出错却无法溯源。 其实,只需要写一个非常简单的日志装饰,我们就能大大提升排查问题的效率。 1.简陋版装饰 写一个
    的头像 发表于 10-31 15:05 493次阅读
    Python 自制简单实用的日志<b class='flag-5'>装饰</b><b class='flag-5'>器</b>

    如何写一个简单的装饰

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