zoukankan      html  css  js  c++  java
  • Python设计模式(4)-装饰模式

    # 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()
  • 相关阅读:
    浅释一下,为什么要使用接口?
    枚举的简单使用
    最富有的人
    拜读websharp时,发现的几处问题(二)
    如何规划职业发展道路如何规划职业发展道路(ZT)
    在.NET环境中使用单元测试工具NUnit(ZT)
    [转贴]不得不知的几个可怕信息!
    ASP.NET中数据导入至Excel
    拜读websharp时,发现的几处问题(一)
    合并DataGrid相同单元格
  • 原文地址:https://www.cnblogs.com/zijiyanxi/p/5273247.html
Copyright © 2011-2022 走看看