Replace Inheritance with Delegation(以继承取代委托)

你在两个类之间使用委托关系,并经常为整个接口编写许多极简单的委托函数。
让委托类继承受托类
这里写图片描述

1. 动机

  1. 本重构与Replace Inheritance with Delegation(以委托取代继承)恰恰相反。如果你发现自己需要使用受托类的所有函数,并且费了很大力气编写所有极简的委托函数,本重构可以帮助你轻松回头使用继承。
  2. 两条告诫:①.如果你并没有使用受托类的所有函数,那么就不应该使用Replace Inheritance with Delegation(以继承取代委托),因为子类应该总是遵循超类的接口。如果过多的委托函数让你烦心,你有别的选择:你可以通过Remove Middle Man(移除中间人)让客户端自己调用受托函数,也可以使用Extract Superclass(提炼类)将两个类接口相同的部分提炼到超类中,然后让两个类都继承这个新的超类;你还可以用类似的手法使用Extract Interface(提炼接口)
  3. 另一种需要当心的情况是:受托对象被不止一个其他对象共享,而且受托对象是可变的。在这种情况下,你就不能将委托关系替换为继承关系,因为这样就无法再共享数据了。数据共享是必须由委托关系承担的一种责任,你无法把它转给继承关系。如果受托对象是不可变,数据共享就不成问题,因为你大可以放心赋值对象。

2.做法

  1. 让委托端称为受托段的一个子类。
  2. 编译。
    1)此时,某些函数可能会发生冲突:他们可能有相同的名称,但在返回类型、异常指定或可见承担方面有所差异。
  3. 将受托字段设为该字段所处对象本身。
  4. 去掉简单的委托函数。
  5. 编译并测试。
  6. 将所有其他设计委托关系的代码,改为调用对象自身。
  7. 移除受托字段。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值