#!/user/bin/evn python
#-*- coding:utf-8 -*-
'''
大话设计模式
设计模式——装饰模式
装饰模式(Decorator Pattern):动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.
特点: 有效的把类的核心职责和装饰功能区分开,而且可以去除相关类中重复的装饰逻辑
'''
#定义对象接口
class Persion(object):
def __init__(self,name0):
self.name = name0
def show(self):
print("装扮的%s"%self.name)
#装饰类,继承这个接口
class Finery(Persion):
def __init__(self):
pass
#这个方法是重点,实现了对自己的调用
def Decorate(self,component):
self.component = component
def show(self):
if self.component != None:
self.component.show()
#装扮T
class Tshirts(Finery):
def __init__(self):
pass
def show(self):
print ('T')
self.component.show()
class BigTrouser(Finery):
def __init__(self):
pass
def show(self):
print('dakucha')
self.component.show()
class Flip(Finery):
def __init__(self):
pass
def show(self):
print('ssssss')
self.component.show()
if __name__ == '__main__':
p = Persion('mingming')
ff = Finery()
bt = BigTrouser()
ts = Tshirts()
f =Flip()
ff.Decorate(p)
bt.Decorate(ff)
ts.Decorate(bt)
f.Decorate(ts)
#串联起来后
f.show()
通过一个个继承自装饰类Finery的对象,实现给Person类赋予职责的功能,Person类并不会感知Finery的存在