装饰模式:
应用特点:是动态的给主功能添加一些装饰性的功能。
结构特性:就是把各装饰性的功能和主功能分开,然后根据需要选择装饰性的功能来修饰主功能即可。
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__.newclass3
something3
something2
something1
All packed mine!