装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
应用场景:适用于 "新加入的功能仅仅是为了满足一些只在某些特定情况下才会执行的需求“。
优点:
1、把类中的装饰功能从类中去除,简化原有的类。
2、装饰模式把每个要装饰的功能放在单独的装饰类中,并让这个 装饰类包装它所要装饰的对象。因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地、按顺序地使用装饰功能包装对象。
应用场景:适用于 "新加入的功能仅仅是为了满足一些只在某些特定情况下才会执行的需求“。
优点:
1、把类中的装饰功能从类中去除,简化原有的类。
2、装饰模式把每个要装饰的功能放在单独的装饰类中,并让这个 装饰类包装它所要装饰的对象。因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地、按顺序地使用装饰功能包装对象。
#encoding=utf-8
#
#by panda
#修饰模式
def printInfo(info):
print unicode(info, 'utf-8').encode('gbk')
class Person():
name = ""
def __init__(self, name):
self.name = name;
return;
def Show(self):
printInfo("装扮好的%s" % self.name)
class Finery(Person):
component = None
def __init__(self):
return;
def Decorate(self, component):
self.component = component
def Show(self):
if(None != self.component):
self.component.Show()
class TShirts(Finery):
def Show(self):
printInfo("大T恤")
self.component.Show()
class BigTrouser(Finery):
def Show(self):
printInfo("裤子")
self.component.Show()
def clientUI():
xc = Person("小菜")
bT = BigTrouser()
TS = TShirts()
bT.Decorate(xc)
TS.Decorate(bT)
TS.Show()
return
if __name__ == '__main__':
clientUI();
类图如下: