装饰器是什么(未完成版)

简介: 装饰器是什么(未完成版)

装饰器是什么


概念介绍


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

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


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


定义一个方法


class Log {
    print(msg) {
        console.log(msg)
    }
}
const log = new Log()
log.print('hello')


装饰一下Print函数


  • 日志美化


  • 执行日志 AOP


const dec = (target,property) => {
    const old = target.prototype.print
    target.prototype[property] = msg => {
        console.log('执行print方法...')
        msg = `{${msg}}`
        old(msg)
    }
}
dec(Log,'print')


  • 装饰器工厂


  • 打印定制化


const dec = name => (target,property) => {
    const old = target.prototype.print
    target.prototype[property] = msg => {
        console.log('执行print方法...')
        msg = `{${msg}} ${name}`
        old(msg)
    }
}
dec('Josephxia')(Log,'print')


注解风格的装饰器


function decorate(target, property, descriptor) {
    var oldValue = descriptor.value;
    descriptor.value = msg => {
        msg = `[${msg}]`
        return oldValue.apply(null, [msg]);
    }
    return descriptor;
}
class Log {
    @decorate
    print(msg) {
        console.log(msg)
    }
}


const anotation = (target,proterty,decorate) => {
    const descriptor = decorate(Log.prototype, proterty, Object.getOwnPropertyDescriptor(Log.prototype, proterty))
    Object.defineProperty(Log.prototype ,proterty,descriptor)
}
anotation(Log,'print',decorate)


相关文章
|
5月前
|
测试技术
使用装饰器实现一种失败重跑的方法
使用装饰器实现一种失败重跑的方法
28 0
|
4月前
|
缓存 监控 程序员
Python中的装饰器是一种特殊类型的声明,它允许程序员在不修改原有函数或类代码的基础上,通过在函数定义前添加额外的逻辑来增强或修改其行为。
【6月更文挑战第30天】Python装饰器是无侵入性地增强函数行为的工具,它们是接收函数并返回新函数的可调用对象。通过`@decorator`语法,可以在不修改原函数代码的情况下,添加如日志、性能监控等功能。装饰器促进代码复用、模块化,并保持源代码整洁。例如,`timer_decorator`能测量函数运行时间,展示其灵活性。
38 0
Python函数:函数的定义和调用
本文详细介绍了Python函数的定义和调用方法,包括基本函数定义、参数传递、返回值、文档字符串、作用域、嵌套函数和闭包。通过一个综合详细的学生成绩管理系统的例子,我们展示了如何在实际编程中应用这些函数概念。希望本文对您理解和应用Python函数有所帮助。
|
3月前
|
Python
python函数调用时参数类型错误
【7月更文挑战第11天】
35 1
|
11月前
|
编译器 C++
46 C++ - 非自动继承的函数
46 C++ - 非自动继承的函数
34 0
|
5月前
|
存储 程序员 Python
Python函数定义与调用详解
Python中的函数是可重用代码块,用于接收参数、执行操作并可能返回输出。通过`def`定义函数,如`def greet(name): print(f"Hello, {name}!")`。函数可接受任意数量的参数,包括默认值。调用函数时提供参数,如`greet("Alice")`。可变参数通过星号(*)和双星号(**)实现。函数有助于代码模块化、理解和维护。掌握函数是Python编程基础。
|
5月前
22_自定义装饰器
22_自定义装饰器
112 0
|
关系型数据库 MySQL 数据安全/隐私保护
nest自定义验证类及自定义验证装饰器
nest自定义验证类及自定义验证装饰器
index.js:39 错误:修饰类属性失败。请确保提案类属性已启用并设置为使用松散模式。要在规范模式下将提案类属性与修饰器一起使用,请在阶段 2 中等待下一个主要版本的装饰器。 #79
index.js:39 错误:修饰类属性失败。请确保提案类属性已启用并设置为使用松散模式。要在规范模式下将提案类属性与修饰器一起使用,请在阶段 2 中等待下一个主要版本的装饰器。 #79
76 0