装饰模式(python)

装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
应用场景:适用于 "新加入的功能仅仅是为了满足一些只在某些特定情况下才会执行的需求“。
优点:
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();


类图如下:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值