中间人
症状
一个小伙子(类)只是委托另外一个小伙子(delegate类)传话给她喜欢的姑娘(调用另外一个类)。这个委托类没有做其它额外的事情(那么这个小伙子为什么不直接去追那个姑娘呢,姑娘有可能最后让传话的这个小伙子得到了😂)。 Middle Man病因
有时候是过度消除 Message Chain 导致的结果
有时候你可能会发现是一个类的行为逐渐转移到其它类,被转移之后这个类只是一个空壳,除了委托(delegate)之外什么都不做。
导致的健康问题
如果调用端想使用被委托类的新功能,因为它不知道“被委托类”,所以委托类必须添加简单的委托函数供调用端使用,如果这种函数很多,委托类就完全变成了一个中间人,这样的话无形中增加了开发成本。
治疗
- 如果看到某个类接口有一半的函数都委托给其它类
尝试运用 Remove Middle Man 让它直接和真正的负责的对象打交道
IntelliJ IDEA 练习视频 - 如果看到某些函数内容所表达的用途已经很清晰了
尝试运用 Inline Method 让这些不干实事函数的内容直接放进调用端
IntelliJ IDEA 练习视频 - 如果中间人(Middle Man)还有其它行为
尝试运用 Replace Delegation with Inheritance 把它变成委托类的子类,这样既可以扩展原对象行为,又不必担心那么多委托动作.
IntelliJ IDEA 练习视频
康复
小伙可以见到传说的姑娘了😂
Middle Man After Refactoring
什么情况不治疗
- 中间人是为了避免类之间的依赖。
- 有些设计模式必须要引入中间人的例如代理模式(Proxy),装饰者模式(Decorator)。
网友评论