中介者模式的一点应用

应用软件开发的时候,往往需要把界面显示逻辑和业务逻辑完全分离,以适应界面显示组件、界面显示方式的更换。之前学习了中介者模式http://blog.****.net/u014524641/article/details/79235239,结合MVC思想,根据我对中介者模式的理解,写了这篇关于PC端软件的业务逻辑层和界面显示层如何通过界面控制层分离的文章。

中介者模式意图在于用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。它适用于如下一些情况:

一组对象以定义良好但是复杂的方式时行通信。产生的相互依赖关系结构混乱且难以理解;

一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象;

想定制一个分布在多个类中的行为,而又不想生成太多的子类。

针对实际对中介者模式结构的一些修改:

中介者模式的一点应用

在界面控制类(ConcreteControl)中保存一份界面显示类(ConcreteUserPanel)的实例(m_userPanel),界面显示类中也保存一份界面控制类的实例(m_ConcreteControl).二者之间的通信通过对控制对方的实例进行通信。

而业务逻辑层代码只与界面控制类通信,完全与界面显示类分离。如今界面显示组件繁多、界面风格、开发方式各有特点,如果在软件开发完成后需要更更换界面显示组件,那仅需要更改界面显示层的代码就可以了。

如下是制作登录界面的一个例子:

中介者模式的一点应用

ILoginControl登录界面控制类接口
为登录界面与系统逻辑层的中介,登录界面通过它与系统交互。登录控制类需要保存一个登录界面的实例m_loginDialog,其它方法如图下:

中介者模式的一点应用

ILoginDialog登录界面接口
为登录界面显示类的接口,是面向用户的,用户通过它与逻辑层交互。该类需要保存一个控制类的实例m_control。还需要一个SetControl()方法,其它方法如下:

中介者模式的一点应用

接口实现
需要在界面控制类的构造函数中实例化界面类和给界面实例设置Control实例:

中介者模式的一点应用