Meditor的意思是“仲裁者”“中介者”。一方面,当发生麻烦事的时候,通知仲裁者;当发生设计全体组员的事情时,也通知仲裁者。当仲裁者下达指示时,组员会立即执行。团队成员之间不再互相沟通并私自做出决定,而是发生任何事情都要向仲裁者报告。另一方面,仲裁者站在整个团队的角度对组员上报的事情做出决定。这就是Mediator模式。
示例程序
这段程序是一个GUI程序,它展示了一个登陆对话框,用户在其中输入正确的用户名和密码后可以登录。
对话框的使用方法如下:
- 可以选择作为游客或是作为用户登录。
- 作为用户登录时,需要输入用户名和密码。
- 点击OK按钮可以登录,点击Cancel按钮可以取消登录。
登录场景控件限制:
- 如果选择作为游客访问,那么禁用用户名输入框和密码输入框,使用户无法输入。
- 如果选择作为用户登录,那么启用用户名输入框和密码输入框,使用户可以输入。
- 如果在用户名输入框一个字符都没有输入,那么禁用密码输入框,使用户无法输入密码。
- 如果在用户名输入框中输入了至少一个字符,那么启用密码输入框,使用户可以输入密码(当然,如果作为游客访问,那么密码框依然是禁用状态)。
- 只有在用户名输入框和密码输入框都至少输入一个字符后,OK按钮才处于启用状态,可以被按下(当然如果作为游客访问,那么OK按钮总是处于启用状态)。
- Cancel按钮总是处于启用状态,任何时候都可以按下该按钮。
示例程序类图
Mediator接口
该接口是表示仲裁者的接口,createColleagues方法用于生成Mediator要管理的组员。该示例中这些组员是文本框或者按钮这些控件。
package Mediator;
//仲裁者模式中的仲裁者接口
public interface Meditator {
public abstract void createColleagues();
public abstract void colleaguesChanges();
}
Colleagues接口
该接口是表示向仲裁者进行报告的组员的接口,LoginFrame类(它实现了Mediator接口)首先会调用setMediator方法。该方法的作用是告知组员“我是仲裁者,有事请报告我”。向该方法中传递的参数是仲裁者的实例。之后在需要向仲裁者报告时会用到该实例。
package Mediator;
//仲裁者模式中的同事接口
public interface Colleagues {
public abstract void setMeditaor(Meditator