设计模式之八--装饰器模式

定义:

许向一个先有的对象增添新的功能,同时又不改变其解构

业务场景:
相像一下,动物园里,我有一个方法,是打疫苗,管理员直接调用注射器的这个方法就能给所有动物打针。现在来了一个新动物:大熊猫。众所周知比较珍贵,所以打针之前要先做体检。有以下几个方案可以很容易想到:

1、直接修改注射器方法,增加判断,如果目标是大熊猫,就做体检(直接写)
2、如第1条,但是实现优雅一点,写个拦截器,aop,进行判断,如果是大熊猫,就体检。(aop)
3、购买新的注射器,这个注射器用来给所有需要注射前需要体检的动物使用(继承)
4、不单独购买,把这个注射器给指定部门A(装饰器类A),这个部门持有这个注射器,并强制执行:注射前体检(装饰器)

所以,上文第四个方法是最方便的,易于拓展。当更多的动物,有了更多的要求,我们只要增加更多的部门即可,这些部门都持有注射器。

拓展:后来,又来了一个动物,大象。太大了,体检进行不了,要先麻醉。怎么办?

5、成立新的部门B,这个部门持有上文中的部门A,并强制规定执行:注射前麻醉。

此时会有一个很常见又有趣的结构出现:

SyringeB b = new SyringeB(new SyringeA(new Syringe("流感疫苗")))
b.injection();

总结:我们装饰了注射器类,并增加了部分内容。对原类无任何侵入,所以原有调用都不用担心兼容问题。并且非常易于拓展。

以上。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值