# coding=utf-8

# * 一般情况下,当一个基类写好之后,我们也许不愿意去改动,也不能改动,原因是
# * 这样的在项目中用得比较久的基类,一旦改动,也许会影响其他功能模块,但是,
# * 又要在该类上面添加功能。使用继承,当在A阶段,写出继承类,用过一段时间,发
# * 现又要添加新功能,于是又要从原始类或A阶段的类继承,周而复始,慢慢的,子类
# * 就越来越多,层级就越来越深。然而,事实上,在C阶段需要A阶段的功能,但不需要
# * B阶段的功能,在这种复杂情形下,继承就显得不灵活,于是想到了装饰模式。
#
# * 装饰模式:
# * 需要扩展一个类的功能,或给一个类增加附加责任
# * 需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
# * 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。 class DbManager:
def __init__(self):
pass def operate_db(self):
pass class DecoratePatterns(DbManager):
dbmanager = None def __init__(self):
pass def decorate(self, dbmanager):
self.dbmanager = dbmanager def operate_db(self):
if self.dbmanager:
self.dbmanager.operate_db() class DbInsert(DecoratePatterns):
def operate_db(self):
print '插入操作' class DbDel(DecoratePatterns):
def operate_db(self):
print '删除操作' class DbUpdate(DecoratePatterns):
def operate_db(self):
print '更新操作' if __name__ == "__main__":
dm = DbManager()
db = DbInsert()
print db.operate_db()

Python设计模式(4)-装饰模式的更多相关文章

  1. python设计模式之装饰器详解(三)

    python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...

  2. 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern)

    原文:乐在其中设计模式(C#) - 装饰模式(Decorator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern) 作者:weba ...

  3. python设计模式浅析

    今天简单聊聊python的设计模式,GOF设计模式(c++)和Head first design pattern(Java)是两本设计模式的经典,基本可以照搬在python上面,但是你会发现pytho ...

  4. Python设计模式 - UML - 对象图(Object Diagram)

    简介 对象图和类图的基本概念是类似的,可以看作类图在系统某一时刻的镜像,显示了该时刻系统中参与交互的各个对象以及它们之间的关系. 对象图的元素包括对象.链接.包,元素之间的关系和类图相似. 对象图建模 ...

  5. Python 设计模式之路

    备注:本套笔记内容来源于互联网,只做学习使用,如有侵权请联系本笔记作者. 资料内容 Python 设计模式之路(一)——设计模式 初识 Python 设计模式之路(二)——简单工厂.工厂.抽象工厂模式 ...

  6. 最全36种python设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多软件开发人员经过 ...

  7. Python设计模式 - UML - 类图(Class Diagram)

    简介 类图是面向对象分析和设计的核心,用来描述系统各个模块中类与类之间.接口与接口之间.类与接口之间的关系,以及每个类的属性.操作等特性,一般在详细设计过程中实施. 类图本身就是现实世界的抽象,是对系 ...

  8. python——设计模式

    设计模式是什么? 设计模式是经过总结.优化的,对我们经常会碰到的一些编程问题的可重用解决方案.一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码.反之,设计模式更为高级,它是一种必须在特定情 ...

  9. Python设计模式 - 总览(更新中...)

    最近打算重构部分python项目,有道是"工欲善其事,必先利其器",所以有必要梳理一下相关设计模式.每次回顾基本概念或底层实现时都会有一些新的收获,希望这次也不例外. 本系列打算先 ...

随机推荐

  1. 动态表单数据验证 vue

    idCard: [{ validator: (rule, value, callback) => { if (this.idCardVif === 'idCard') { this.valida ...

  2. Abp 抛出详细异常

    Abp在默认情况下,只要后端抛出异常,一概过滤为服务器错误并弹出,这样并不方便调试,这个时候需要开启一个开关即可: 在模块预初始化PreInitialize中开启,代码如下: , 这样就可以看到详细的 ...

  3. spring给容器中注入组件的几种方式

    目录 环境搭建 spring给容器中注入组件 1.包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)适用于把自己写的类加入组件(默认ID类名 ...

  4. SpringMVC框架——原理及使用

    核心组件 1. DispatcherServlet:前端控制器器,负责调度其他组件的执行,可降低不同组件之间的耦合性,是Spring MVC 的核心模块. 2. Handler:处理器,完成具体的业务 ...

  5. Swift 4.0 数组(Array)学习

    定义数组常量(常量只有读操作) let array1: [Int] = [11, 55, 5] let array2 = [11, 55, 5] 定义数组变量 var array: [Int] = [ ...

  6. Error while importing sbt project:--创建sbt项目导入文件出错

    错误截图如下: Error while importing sbt project: List([info] Loading global plugins from C:\Users\RYJ\.sbt ...

  7. Python之操作文件和目录

    Python内置的os模块可以直接调用操作系统提供的接口函数. # coding=utf-8 # 在指定目录以及指定目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径 import o ...

  8. .gitignore排除(不忽略)二级以上目录下的文件或目录

    在.gitignore中,结合使用/*和!filename的语法,可以达到除特定文件或目录外全部忽略的目的.但当希望不忽略的文件或目录在二级或多级目录下时,如果这样写 /* !/sub/subsub/ ...

  9. cin.getline()的用法和坑

    cin.getline()的用法和坑 cin.getline大致原型:**istream& getline (char* s, streamsize n, char delim='\n');* ...

  10. 3分钟了解GPT Bert与XLNet的差异

    译者 | Arno 来源 | Medium XLNet是一种新的预训练模型,在20项任务中表现优于BERT,且有大幅度的提升. 这是什么原因呢? 在不了解机器学习的情况下,不难估计我们捕获的上下文越多 ...