3.16 中间人(Middle Man)
委托:一个方法直接写功能逻辑,这是亲历亲行;一个方法调用了别的类中的方法,这就是委托。(委托别的类的方法来达到不可告人的目的)
在面向对象中,一个惯用的伎俩就是委托,这是随着封装一同产生的。
封装:对外部世界隐藏其内部细节。
委托是个好东西,但不能滥用:某个类有一半的函数都委托给了其他类,这就是过度运用。(此时此地,其实充斥着依恋情结(3.7节)的味道)
在过度运用委托时,就意味着产生了过多的中间人,这时就该使用移除中间人(7.6 Remove Middle Man)。
移除中间人(7.6 Remove Middle Man):移除中间人和隐藏委托关系是截然相反的两种重构方法,很难说移除中间人和隐藏委托关系(7.5 Hide Delegate)之间的平衡点在哪里,只能随着需求不断调整。
重构的意义:你永远不必说对不起——只要把出问题的地方修补好就行了。
如果某些中间商只是起到倒手作用,就可以运用内联函数(6.2 Inline Method)把它们放进调用端。
内联函数(6.2 Inline Method):如果一个方法小到不能再小,以至于方法内部代码与方法名一样明了,此时,这个方法也许就是多余的了,就该在调用它的地方直接写方法内容即可,然后删掉这个可有可无的方法。
如果这些中间商除了倒手,还进行了处理,那么可以考虑以继承取代委托(11.12 Replace Delegation with Inheritance),把它变成实责对象的子类,这样你既可以扩展原对象的行为,又不必负担那么多的委托动作。
以继承取代委托(11.12 Replace Delegation with Inheritance)