装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。
结构图
角色与理解
- 装饰模式共分为四种角色:
- Component (抽象构件):具体构件与抽象装饰类的共同父类,声明具体构件中实现的业务方法,它的出现能够让客户端一致的透明的对待装饰前和装饰后的类
- ConcreteComponent (具体构件):抽象构件的子类,实现具体的业务方法
- Decorator (抽象装饰类):抽象构件的子类,内部维持一个抽象构件的引用,通过该引用调用具体构件的业务方法
- ConcreteDecorator (具体装饰类):抽象装饰类的实现类,声明并实现各种装饰方法实现对具体构件的装饰
- 具体构件和装饰具体构件的抽象装饰类通过注入的方式被抽象装饰类继续装饰
- 因为具体构件和抽象装饰类都继承抽象构件,所以被装饰时可以被同样的对待,更加灵活
核心代码
- 抽象组件
- 具体构件
- 抽象装饰类
- 具体装饰类
- 客户端
注意事项
- 尽量保持装饰类与被装饰类的接口相同,确保在客户端调用时能够被一致对待
- 被装饰类尽量是一个“轻”类,较少的职能,通过装饰类对其进行扩展
- 如果具体构件类只有一个,那么抽象装饰类可以直接是具体构件类的子类
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
pattern
+关注
关注
0文章
6浏览量
9633
发布评论请先 登录
相关推荐
理解Python装饰器及其工作原理
Python 是一种对新手很友好的语言。但是,它也有很多较难掌握的高级功能,比如装饰器(decorator)。很多初学者一直不理解装饰器及其工作原理,在这篇文章中,我们将介绍
发表于 10-08 11:39
•2216次阅读
SeaORM的基础用法
可读性。 在本教程中,我们将介绍SeaORM的基本用法和进阶用法。我们将使用SQLite数据库来演示这些用法。 基础用法 在使用SeaORM
基于Rust语言Hash特征的基础用法和进阶用法
,包括Hash trait、HashMap、HashSet等,本教程将详细介绍Rust语言Hash特征的基础用法和进阶用法。 基础用法 使用Hash trait 在Rust语言中,Hash trait
OpenHarmony装饰指定自定义组件:@BuilderParam装饰器
引入了@BuilderParam装饰器,@BuilderParam用来装饰指向@Builder方法的变量,开发者可在初始化自定义组件时对此属性进行赋值,为自定义组件增加特定的功能。该装饰
发表于 09-27 16:02
适配器模式和装饰模式的区别
装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。在计算机编程中,适配器模式(有时候也称包装样式或者包
发表于 01-15 10:31
•7002次阅读
Python:装饰器的原理和案例
Python中的装饰器用于扩展可调用对象的功能,而无需修改其结构。基本上,装饰器函数包装另一个函数以增强或修改其行为。我们可以通过一个具体的例子了解基础知识!让我们编写一个包含装饰
嵌入式C语言软件设计之装饰器模式(Decorator Pattern)
装饰器模式(Decorator Pattern),是结构型设计模式的一种,装饰器
发表于 03-01 10:55
•412次阅读
在Python中装饰器的使用
定义 首先我们先来了解下装饰器的定义。顾名思义,在Python中,装饰器本质上就是一个函数,它可以接收一个函数作为参数,然后返回一个新的函数。这个新的函数可以在执行原有函数之前或之后,
Python自制简单实用的日志装饰器
在写代码的时候,往往会漏掉日志这个关键因素,导致功能在使用的时候出错却无法溯源。 其实,只需要写一个非常简单的日志装饰器,我们就能大大提升排查问题的效率。 1.简陋版装饰器 写一个
Python 自制简单实用的日志装饰器
在写代码的时候,往往会漏掉日志这个关键因素,导致功能在使用的时候出错却无法溯源。 其实,只需要写一个非常简单的日志装饰器,我们就能大大提升排查问题的效率。 1.简陋版装饰器 写一个
如何写一个简单的装饰器
今天介绍的是一个已经存在十三年,但是依旧不红的库 decorator,好像很少有人知道他的存在一样。 这个库可以帮你做什么呢 ? 其实很简单,就是可以帮你更方便地写python装饰器代码,更重
评论