关于开放封闭原则,其核心的思想是:
软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
因此,开放封闭原则主要体现在两个方面:
对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
“需求总是变化”、“世界上没有一个软件是不变的”,这些言论是对软件需求最经典的表白。从中透射出一个关键的意思就是,对于软件设计者来说,必须在不需要对原有的系统进行修改的情况下,实现灵活的系统扩展。
不修改源代码、不修改调用方式,上线后还需要扩展,就用到了装饰器
装饰器可以是任何可调用对象
1 装饰器
1.1 无参装饰器,为被装饰的函数添加统计时间功能
装饰器用到的是闭包函数,在下面的例子中是wrapper函数,我们首先需要了解程序的运行流程,下面一步步的分析:
程序运行到@timmer时,会执行timmer(index) ,index是timmer下面最近的函数名,函数名index作为timmer的参数,下面运行timmer函数。timmer函数运行结束会返回wrapper,继续运行到@timmer,timmer(index)的返回值会赋值给index,也就是index=timmer(index) 。然后执行最后的index()函数,此时实际是wrapper(),然后进入到wrapper函数中执行,wrapper函数是闭包函数,内部有个func函数,执行到这里的时候,wrapper函数颞部没有定义func,就到其外部作用域寻找,在这里是timmer函数传入的参数func。wrapper中的func的地址是最初的index函数的地址,所以执行就是执行下面的index中的 time.sleep(1) \print(“welcome index page”)着两句。
|
|
1.2 有参装饰器,为被装饰函数添加函数认证功能
有参装饰器是在无参装饰器的的外面再添加一个函数,这个函数负责接收的参数是用于判读用户信息的来源,这里测试是从文件中读取用户信息。
程序思路:
首先程序执行道@auth_file(auth_type=”file”),这是auth外面的函数,它的返回值是auth,重点–>,此时程序就是@auth,思路和无参装饰器是一样的,index=auth(index).
程序分为3部分,装饰器定义部分,被装饰函数,函数引用。
|
|