Middle Man

中间人

症状

一个小伙子(类)只是委托另外一个小伙子(delegate类)传话给她喜欢的姑娘(调用另外一个类)。这个委托类没有做其它额外的事情(那么这个小伙子为什么不直接去追那个姑娘呢,姑娘有可能最后让传话的这个小伙子得到了)。
Middle Man_第1张图片
Middle Man

病因

有时候是过度消除 Message Chain 导致的结果
有时候你可能会发现是一个类的行为逐渐转移到其它类,被转移之后这个类只是一个空壳,除了委托(delegate)之外什么都不做。

导致的健康问题

如果调用端想使用被委托类的新功能,因为它不知道“被委托类”,所以委托类必须添加简单的委托函数供调用端使用,如果这种函数很多,委托类就完全变成了一个中间人,这样的话无形中增加了开发成本。

治疗

  • 如果看到某个类接口有一半的函数都委托给其它类

尝试运用 Remove Middle Man 让它直接和真正的负责的对象打交道
IntelliJ IDEA 练习视频

  • 如果看到某些函数内容所表达的用途已经很清晰了

尝试运用 Inline Method 让这些不干实事函数的内容直接放进调用端
IntelliJ IDEA 练习视频

  • 如果中间人(Middle Man)还有其它行为

尝试运用 Replace Delegation with Inheritance 把它变成委托类的子类,这样既可以扩展原对象行为,又不必担心那么多委托动作.
IntelliJ IDEA 练习视频

康复

小伙可以见到传说的姑娘了

Middle Man_第2张图片
Middle Man After Refactoring

什么情况不治疗

  • 中间人是为了避免类之间的依赖。
  • 有些设计模式必须要引入中间人的例如代理模式(Proxy)装饰者模式(Decorator)

你可能感兴趣的:(Middle Man)