设计模式,我理解的代理模式

今天看到这篇博文谈代理模式(委托模式)
http://www.cnblogs.com/limlee/archive/2012/06/13/2547367.html,
写的很好,但在为什么要用该设计模式的方面,我有更多的理解。

----------------------------------------------------------------
简单的说,A类型的对象要做一件事情,或者要提供一些数据,但是它不自己做,而是委托给B类型的对象来做,就是代理模式或者委托模式。

常见的使用场景是,一个类型,类型A,它的某个行为有多种不同的实现(比如不同的鸭子是用不同的方法来叫的),这时候,A类型不要自己决定如何实现这个行为,即不要用ifelse,也不要创建多个A类型的子类(这样的弊端在下文讨论),正确的做法是A类型的对象将这个行为委托给另一个B类型的对象,B类型就是专门处理这个行为的,B类型可以有多个子类来写不同的实现。

设计模式的几个基本思想中,其中有两个在上面体现到了,一个是将有不同的行为从原类型中剥离出来(而不是留在原来的类型中、不要继承原来的类型以创建不同的子类,不要这样。)将不变的东西留在原来的类型中。另一个是基本思想是:每个类型都尽可能专属的负责一个最简单的事情。

-----------------------------------------------------------------
为什么不要通过继承创建多个A类型的子类来实现A类型的某个行为的不同实现呢? 假如不同类型的鸭子是用不同的方法来叫,且为每种鸭子创建一个子类,分别叫做叫方式1子类,叫方式2子类,.......,可是假如继续需求增加,还有睡眠方式的不同,还有挥动翅膀的方式不同,等十个行为的不同需要处理,如果每个行为有10种不同的实现,如果要写子类的话,排列组合要写多少个子类呢?10的10次方个?!

---------------------------------------------
值得讨论的一个问题:
那么是否意味着,如果一个类型的某个行为有多种实现,就一定要将这个行为抽象出去作为一个单独的基类并创建多个该基类的子类来提供各个不同的实现呢?
难道就不能在原类型中提供一个虚函数,然后让原类型的子类去提供不同的子类吗?


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值