设计模式之python版(三)--装饰模式

来源:互联网 发布:淘宝如何设置自动回复 编辑:程序博客网 时间:2024/05/16 18:43

装饰模式:

应用特点:是动态的给主功能添加一些装饰性的功能。

结构特性:就是把各装饰性的功能和主功能分开,然后根据需要选择装饰性的功能来修饰主功能即可。

UML:


#!/usr/bin/env python  #encoding: utf-8    ##被装饰的主类class baseclass:    def __init__(self):        pass        def set_compent(self):        pass        def pack_something(self):          print 'All packed me!'   ##连接特性类与主类的中间层类class packclass(baseclass):      def __init__(self):            pass          def set_compent(self,compent):        if None != compent:            self.compent = compent                def pack_something(self):          self.compent.pack_something()     ##修饰主类的特性类class newclass1(packclass):      def __init__(self):          pass            def pack_something(self):          print 'something1'          packclass.pack_something(self)##修饰主类的特性类          class newclass2(packclass):      def __init__(self):          pass            def pack_something(self, ):          print 'something2'          packclass.pack_something(self)##修饰主类的特性类          class newclass3(packclass):      def __init__(self):          pass            def pack_something(self):          print 'something3'          packclass.pack_something(self)            if '__main__' == __name__:      mainobj = baseclass()    class1_obj = newclass1()    class2_obj = newclass2()    class3_obj = newclass3()        print mainobj.__class__          print class1_obj.__class__      print class2_obj.__class__      print class3_obj.__class__          class1_obj.set_compent(mainobj)    class2_obj.set_compent(class1_obj)    class3_obj.set_compent(class2_obj)    class3_obj.pack_something()

结果:

__main__.baseclass__main__.newclass1__main__.newclass2__main__.newclass3something3something2something1All packed mine!