知识拓展:设计模式之装饰器模式

打印 上一主题 下一主题

主题 1002|帖子 1002|积分 3006

装饰器模式拓展


1. 什么是装饰器模式?

装饰器模式(Decorator Pattern)是一种布局型设计模式,允许向一个现有的对象添加新的功能,同时又不改变其布局。装饰器模式通过创建一个装饰类来包装原始类,从而在不修改原始类代码的情况下扩展其功能。
1.1 特点



  • 动态地给对象添加功能
  • 制止子类的爆炸性增长
  • 更灵活的功能扩展
1.2 实用场景



  • 必要动态地为对象添加功能
  • 不能通过继承来扩展功能
  • 必要对功能进行组合
2. Python 中的装饰器

Python 中的装饰器是一种语法糖,允许在不修改函数或方法代码的情况下,动态地修改其举动。装饰器可以用于函数、方法和类,常用于日志记录、访问控制、缓存等场景。
2.1 根本用法

装饰器本质上是一个函数,它担当一个函数作为参数,并返回一个新的函数。装饰器可以通过 @decorator_name 语法应用于函数。
  1. # 定义一个简单的装饰器
  2. from functools import wraps
  3. def my_decorator(func):
  4.     @wraps(func)
  5.     def wrapper(*args, **kwargs):
  6.         print("Function is being called")
  7.         result = func(*args, **kwargs)
  8.         print("Function has been called")
  9.         return result
  10.     return wrapper
  11. # 使用装饰器
  12. @my_decorator
  13. def say_hello(name):
  14.     print(f"Hello, {name}!")
  15. say_hello("Alice")
复制代码
2.2 类装饰器

类装饰器是通过实现 __call__ 方法的类来实现的。它们可以用于更复杂的装饰逻辑。
  1. class MyDecorator:
  2.     def __init__(self, func):
  3.         self.func = func
  4.     def __call__(self, *args, **kwargs):
  5.         print("Class-based decorator: Function is being called")
  6.         result = self.func(*args, **kwargs)
  7.         print("Class-based decorator: Function has been called")
  8.         return result
  9. # 使用类装饰器
  10. @MyDecorator
  11. def greet(name):
  12.     print(f"Greetings, {name}!")
  13. greet("Bob")
复制代码
2.3 常见应用



  • 日志记录:在函数调用前后记录日志信息。
  • 访问控制:查抄用户权限,决定是否允许实行函数。
  • 缓存:缓存函数的返回值,以进步性能。
  • 性能计时:测量函数实行时间。
2.4 注意事项



  • 利用 functools.wraps 保留原函数的元数据。
  • 装饰器的顺序很紧张,多个装饰器时从内到外应用。
  • 确保装饰器不改变原函数的签名和返回值。
3. 总结

装饰器模式是一种强大的设计模式,实用于必要动态扩展对象功能的场景。Python 中的装饰器是这一模式的具体实现,提供了一种简便而强大的方式来扩展函数和方法的功能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表