半透明装饰模式不能实现对同一个对象的多次装饰

为什么半透明装饰模式不能实现对同一个对象的多次装饰?

   透明装饰器模式和半透明装饰器模式的区别是是否可以显示的调用具体装饰器类的业务方法,对于透明模式,每次都在重写的方法里增加了业务,每次在重写的方法中调用了parent.f(),都可以使用上次具体的增强方法,但对于半透明装饰器,不会在重写的方法中调用增强的方法(因为希望独立地调用),每一次装饰就丢失了上一次的装饰。

   透明装饰不能多次装饰的原因我觉得是半透明装饰的本质问题,因为装饰者模式的精髓在于通过重写父类方法并在该方法上加上新增方法实现的。如果半透明装饰把它的新增方法给禁用了(让他们之间没有调用关系),那么相当于打断了它一条腿,对装饰对象不断装饰装饰再装饰,那么装饰子类是没有机会调用新增方法的。除了最外层的装饰子类可以手动调用装饰方法,再往里面的装饰子类就埋没了他们的“才能”。

   由于半透明装饰模式的具体装饰类没有override从父类继承的方法,调用父类方法和调用新增方法是分开进行的,导致装饰效果没有累加起来,但不会让程序运行出错,所以不能实现对同一个对象的多次装饰。(被多次装饰得出的对象只能调用最后一个装饰类的新增方法,不能调用之前的装饰类的新增方法)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值