协调多个对象之间的交互—中介者模式(三)
20.3 完整解决方案
图20-7 引入了中介者类的“客户信息管理窗口”结构示意图
图20-8 重构后的“客户信息管理窗口”结构图
[java] view plaincopy
- //抽象中介者
- abstract
class Mediator { -
public abstract void componentChanged(Component c); -
}
-
- //具体中介者
- class
ConcreteMediator extendsMediator { -
//维持对各个同事对象的引用 -
public Button addButton; -
public List list; -
public TextBox userNameTextBox; -
public ComboBox cb; -
-
//封装同事对象之间的交互 -
public void componentChanged(Component c) { -
//单击按钮 - if(c
== addButton) { -
System.out.println("--单击增加按钮--"); -
list.update(); -
cb.update(); -
userNameTextBox.update(); -
} -
//从列表框选择客户 -
else if(c == list) { -
System.out.println("--从列表框选择客户--"); -
cb.select(); -
userNameTextBox.setText(); -
} -
//从组合框选择客户 -
else if(c == cb) { -
System.out.println("--从组合框选择客户--"); -
cb.select(); -
userNameTextBox.setText(); -
} -
} -
}
-
- //抽象组件类:抽象同事类
- abstract
class Component { -
protected Mediator mediator; -
-
public void setMediator(Mediator mediator) { -
this.mediator = mediator; -
} -
-
//转发调用 -
public void changed() { -
mediator.componentChanged(this); -
} -
-
public abstract void update(); -
}
-
- //按钮类:具体同事类
- class
Button extendsComponent { -
public void update() { -
//按钮不产生交互 -
} -
}
-
- //列表框类:具体同事类
- class
List extendsComponent { -
public void update() { -
System.out.println("列表框增加一项:张无忌。"); -
} -
-
public void select() { -
System.out.println("列表框选中项:小龙女。"); -
} -
}
-
- //组合框类:具体同事类
- class
ComboBox extendsComponent { -
public void update() { -
System.out.println("组合框增加一项:张无忌。"); -
} -
-
public void select() { -
System.out.println("组合框选中项:小龙女。"); -
} -
}
-
- //文本框类:具体同事类
- class
TextBox extendsComponent { -
public void update() { -
System.out.println("客户信息增加成功后文本框清空。"); -
} -
-
public void setText() { -
System.out.println("文本框显示:小龙女。"); -
} -
}
[java] view plaincopy
- class
Client { -
public static void main(String args[]) { -
//定义中介者对象 -
ConcreteMediator mediator; -
mediator = new ConcreteMediator(); -
-
//定义同事对象 -
Button addBT = new Button(); -
List list = new List(); -
ComboBox cb = new ComboBox(); -
TextBox userNameTB = new TextBox(); -
-
addBT.setMediator(mediator); -
list.setMediator(mediator); -
cb.setMediator(mediator); -
userNameTB.setMediator(mediator); -
-
mediator.addButton = addBT; -
mediator.list = list; -
mediator.cb = cb; -
mediator.userNameTextBox = userNameTB; -
-
addBT.changed(); -
System.out.println("-----------------------------"); -
list.changed(); -
} -
}
--单击增加按钮-- 列表框增加一项:张无忌。 组合框增加一项:张无忌。 客户信息增加成功后文本框清空。 ----------------------------- --从列表框选择客户-- 组合框选中项:小龙女。 文本框显示:小龙女。 |
【作者:刘伟
http://blog.csdn.net/lovelion】