python版:装饰器模式

装饰器模式介绍


装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。


装饰器模式实现


设计模式只是一种思想与语言无关,设计模式可以通过多种语言方式去实现它

今天我们来使用python中函数的闭包形式来类似实现装饰器模式

下面我们在不改变原函数定的情况下,给原函数添加新的功能。我们在不改动原函数的情况下,给原函数添加日志功能


装饰器模式python代码展示


import time

def log(func_arg):
    """日志装饰器 给调用的函数进行日志打印"""
    def func_time():
        print("log %s begin time:%s" % (func_arg.__name__,time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time() ) ) )   )
        func_arg()
        print("log %s end time:%s" % (func_arg.__name__ ,time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))))
    return func_time

@log
def func1():
    print("func1业务逻辑开始")
    # func1 函数的业务逻辑
    for i in range(100000000):
        pass
    print("func1业务逻辑结束")
@log
def func2():
    print("func2业务逻辑开始")
    # func2 函数的业务逻辑
    for i in range(100000000):
        pass
    print("func2业务逻辑结束")

# func1 = log(func1)# 使用python中语法糖进行代替 效果一样
# func2 = log(func2)# 使用python中语法糖进行代替 效果一样
func1()
func2()

装饰器模式python代码说明


采用函数式编程的思想,将需要拓展功能的原函数,将其作为参数 传送到我们的装饰器中,返回一个新的函数替换原函数 ,新函数执行会执行原函数,这样我们就可在执行原函数的前后添加我们自定义的功能了,而不需要改动原函数了。这种利用闭包的实现方式都可以在支持函数式编程的语言中去实现比如JavaScript就可以用差不多的语法进行实现,c语言中可以用指针实现类似的装饰器模式。

还有就是 采用了语法糖可以代替装饰器函数将原函数包起来


装饰器模式运行结果






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值