重构手法68:Replace Delegation with Inheritance (以继承取代委托)

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

动机:本项重构与Replace Inheritance with Delegation (以委托取代继承)恰恰相反。如果你发现自己需要受托类中的所有函数,并且花费很大力气编写所有极简单的委托函数,本重构可以帮助你轻松回头使用继承。

       2条告诫需牢记与心:首先,如果你并没有使用受托类的所有函数,那么就不应该使用Replace Delegation with Inheritance (以继承取代委托),因为子类应该总是遵循超类的接口。如果过多的委托函数让你烦心,你有别的选择:你可以通过 Remove Middle Man (移除中间人)让客户端自己调用受托函数,也可以使用Extract Superclass (提炼超类)将2个类接口相同的部分提炼到超类中,然后让2个类都继承这个新的超类;你还可以用类似手法使用Extract Superclass (提炼超类)。

       另一种需要当心的情况是:受托对象被不止一个其他对象共享,而且受托对象是可变的。在这种情况下,你就不能将委托关系替换为继承关系,因为这样就无法再共享数据了。数据共享是必须由受托对象承担的一种责任,你无法把它转给继承关系。如果受托对象是不可变的,数据共享就不成问题,因为你大可放心地复制对象。

 

你可能感兴趣的:(inheritance)