裝飾模式:動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比產生子類更為靈活。
應用情境:適用於 "新加入的功能僅僅是為了滿足一些只在某些特定情況下才會執行的需求“。
優點:
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() returnif __name__ == '__main__': clientUI();
類圖如下: