网络编程
位置:首页>> 网络编程>> Python编程>> python设计模式之装饰器模式

python设计模式之装饰器模式

作者:??图图加油????  发布时间:2023-04-28 07:55:40 

标签:python,设计,装饰器,模式

装饰器模式

装饰器模式解决什么问题?

  • 增加新功能,且不改变原有功能和代码

  • 选配,根据不同情况,动态调整功能

装饰器,顾名思义,就是用来装饰其他实物,增加被装饰物的功能而不改变被装饰物。这就像我们买车,同一款车型,有很多功能是选配的,但是车的核心功能不变。我们可以在购买时,根据需要选配不同的配置。

如何实现?

想象一下,你是一个装修工,如果要装饰一辆车,那么你首先需要有一辆车,而且在装饰过程中,你不能够改变车原有的功能(接口)。

python设计模式之装饰器模式

如类图所示:

  • 核心功能Core和所有装饰器都必须实现Interface接口

  • 所有装饰器以组合的方式保存接口实例

class Core:
   def some_action():
       pass

class Decorator:
   def __init__(self,core):
       self.core = core

def some_action():
       ....
       self.core.some_action()
       .....

python 装饰器语法糖

装饰器太常用了,python专门的语法糖简化了装饰器的使用。最外层函数接收一个函数对象并返回内层函数,内层函数是正真的执行函数。

# 装饰器定义
def decorator(func):
   def wrapper(*args,**kwargs):
       .....
       result = func(*args,**kwargs)
       ....
       return result
   return wrapper
# 装饰器使用
@decorator
def func():
    pass

虽然形式变了,但是实质没有变:保存接口实例,实现相同的接口。

  • 保存接口实例容易理解,因为传入了函数func对象。

  • 实现相同的接口怎么理解?语法糖@xxxx的操作等价于func = decorator(func),即将内层函数重命名了原函数名。

来源:https://juejin.cn/post/7095776102341148708

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com