每一个软件单位对其它单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
某软件公司所开发 CRM 系统包含很多业务操作窗口。在这些窗口中某些界面控件之间存在复杂的交互关系,一个控件事件的触发将导致多个其他界面控件产生响应。例如:当一个按钮(Button)被单击时,对应的列表框(List)、组合框(ComboBox)、文本框(TextBox)、文本标签(Label)等都将发生改变。在初始设计方案中,界面控件之间的交互关系可简化为下图所示的结构。
在上图中,由于界面控件之间的交互关系复杂。导致在该窗口中增加新的界面控件时需要修改与之交互的其他控件的源代码;系统扩展性较差;也不便于增加和删除控件。
现使用迪米特法则对其进行重构。
解析(参考):
在本实例中可以通过引人一个专门用于控制界面控件交互的中间类(Mediator)来降低界面控件之间的耦合度。在引人中间类之后,界面控件之间不再发生直接引用,而是将请求先转发给中间类,再由中间类来完成对其他控件的调用。当需要增加或删除新的控件时只需要修改中间类即可,无须修改新增控件或已有控件的源代码,重构后的结构如图所示。