改善既有代码的设计》之二 对象之间搬移特性(2)

动机:在Hide Delegate中的例子里当Department有更多新方法的时候,我们为了Hide Delegate,就要必须在Person里添加相应的方法做Delegate之用。这时候的Person完全变成了一个Middle Man,此时我们就应该直接调用Delegate Class——Department。

 重构的意义就在于:你永远不必说对不起,只要你把出问题的地方修补好就行了。

 

 

改善既有代码的设计》之二 对象之间搬移特性

 

改善既有代码的设计》之二 对象之间搬移特性

 Introduce Foreign Method

 

状况:有一个类Client需要使用的类PreviousEnd中一个额外函数,但你无法修改这个类PreviousEnd,那么你就在Client中建立一个函数,并以一个PreviousEnd实体做为参数。

改善既有代码的设计》之二 对象之间搬移特性

改善既有代码的设计》之二 对象之间搬移特性

 Introduce Local Extention

 

状况:你的Class需要一些额外函数,但你不能修改当前的类,那么建立一个新Class,使它包含这些函数。使用Subclass 或 Wrapper。——这个一般用于你无法修改源码的情况下使用。

 

 拿上面Introduce Foreign Method例子来说

改善既有代码的设计》之二 对象之间搬移特性

使用Subclass方法

 

改善既有代码的设计》之二 对象之间搬移特性

或使用Wrapper

改善既有代码的设计》之二 对象之间搬移特性

总结

 

需要注意一下,“Extract Class”和“Inline Class”,”Hide Delegate“和”Remove Middle Man",都是相反的过程,具体理解,可以看前言中的那张流程图。

 

“Hide Delegate"我们常用于使用少量的”Delegate Method“的时候,而”Remove Middle Man“,用于调用很多”Delegate Method“的时候,我们可以直接使用Delegate Class,进行调用,而有的Delegate Method我们视情况保留一部分。

 

“Extract Class”和“Inline Class”,"Extract Class"经常用于承担那过多责任而变得臃肿不堪的Class中,而“Inline Class”经常用于当前的这个类”太不负责的“时候使用。——我个人是宁愿“Extract Class”,也不愿“Inline Class”。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5395f960b5ad7f73c077317e14b4c2b8.html