设计模式—装饰模式

  今天Leo来到了图书馆写博客啦~说道省图,真是慢慢的都是回忆呀。中学时代好多的作业都是省图抄别人的TAT。

 

  趁热打铁,我记得课堂上老师说提到过的设计模式貌似就这么多了。所以设计模式Leo这是梳理的最后一个。其实所谓的模式有很多,细分下来至少也有个20-30种。所以以后的路还要靠大家指引提携~所以话不多说,赶紧写出最后的一个模式吧~

 

  今天梳理的是装饰者模式。一如既往,度娘定义:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象 。

 

  这个又是如何理解呢?别着急,让我再给大家YY一个例子。作为吃货还是从吃说起吧。

话说一天我去大学旁边的奶茶店买奶茶,在窗口映入眼帘的是原味奶茶,香草奶茶,巧克力奶茶等等。当点完奶茶的时候,我看到奶茶店允许顾客从奶茶中添加珍珠,果冻,或者是各式各样的糖什么的,当然价钱的话需要额外的计算。

 

  这样问题来了,每一个顾客的口味不一样呀~萝卜白菜各有所爱对不对?有人喜欢这个,有人喜欢那一个。所以如果要设计这么一套程序的话,我们不能一概而论的将每一杯奶茶都加上香草,布丁,珍珠.....所以呢我们需要动态地给他呈上。这就是装饰者模式的初衷,我不需要改变原来的奶茶的特点或者制作流程,而是在特定的场景下给他包装一下,达到定制以至于满足广大顾客的需求。

 

  那么具体来讲怎么做呢?这个也不难,我们在原来的需要装饰的类(奶茶)中设置一个方法,这个方法可以将装饰的东西装载到类中。然后在此类中设置这个方法让他show出来就好啦~是不是很简单呢!

 

  既然如此,我以奶茶的例子就把这个套路的类图和python实现po出来啦:

class milky_tea:
    def __init__(self):
        self.name='milky_tea'

    def show(self):
        print 'original milky tea'

class milky_tea_decorate(milky_tea):
    def decorate(self):
        pass

class milky_tea_pearl(milky_tea_decorate):
    def __init__(self):
        self.name='pearl_milky_tea'
    def decorate(self):
        print'with pearl'

class milky_tea_pudding(milky_tea_decorate):
    def __init__(self):
        self.name='pudding_milky_tea'
    def decorate(self):
        print'with pudding'

if __name__=='__main__':
    
    my_milkytea=milky_tea()
    my_pearl_milkytea=milky_tea_pearl()
    my_pudding_milkytea=milky_tea_pudding()

    my_milkytea.show()
    my_pearl_milkytea.show()
    my_pearl_milkytea.decorate()
    my_pudding_milkytea.show()
    my_pudding_milkytea.decorate()


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值