中介者模式(Mediator)Java
2016-06-12 12:39
555 查看
中介者模式(Mediator):
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。类图:
参考
以上不太好理解:我在网上找了两幅图帮助理解
代码
Country国家抽象类
package ding.study.designpatterns.mediator;/**
* 国家抽象类
*
* @author daniel
*
*/
abstract class Country {
//联合机构
protected UnitedNations mediator;
public Country(UnitedNations mediator) {
this.mediator = mediator;
}
}
UnitedNations联合国机构抽象类
package ding.study.designpatterns.mediator;/**
* 联合国机构抽象类
* @author daniel
*
*/
abstract class UnitedNations {
//声明
public abstract void declare(String message,Country colleague);
}
UnitedNationsSecurityCouncil安理会
package ding.study.designpatterns.mediator;/**
* 安理会
* @author daniel
* @email 576699909@qq.com
* @time 2016-6-12 上午10:07:14
*/
public class UnitedNationsSecurityCouncil extends UnitedNations {
// 美国
private USA colleague1;
// 伊拉克
private Iraq colleague2;
/**
* @param colleague1
* the colleague1 to set
*/
public void setColleague1(USA colleague1) {
this.colleague1 = colleague1;
}
/**
* @param colleague2
* the colleague2 to set
*/
public void setColleague2(Iraq colleague2) {
this.colleague2 = colleague2;
}
@Override
public void declare(String message, Country colleague) {
if (colleague == colleague1) {
colleague2.getMessage(message);
} else {
colleague1.getMessage(message);
}
}
}
USA
package ding.study.designpatterns.mediator;/**
* 美国
* @author daniel
* @email 576699909@qq.com
* @time 2016-6-12 上午10:03:41
*/
public class USA extends Country {
/**
* 构造函数
* @param mediator
*/
public USA(UnitedNations mediator){
//调用父类构造函数
super(mediator);
}
/**
* 声明
* @param message
*/
public void declare(String message){
mediator.declare(message, this);
}
/**
* 获得消息
* @param message
*/
public void getMessage(String message){
System.out.println("美国获得对方信息:"+message);
}
}
Iraq
package ding.study.designpatterns.mediator;/**
* 伊拉克 国家
* @author daniel
* @email 576699909@qq.com
* @time 2016-6-12 上午10:03:28
*/
public class Iraq extends Country {
/**
* 构造函数
* @param mediator
*/
public Iraq(UnitedNations mediator){
//调用父类构造函数
super(mediator);
}
/**
* 声明
* @param message
*/
public void declare(String message){
mediator.declare(message, this);
}
/**
* 获得消息
* @param message
*/
public void getMessage(String message){
System.out.println("美国获得对方信息:"+message);
}
}
测试类ZMain
package ding.study.designpatterns.mediator;/**
* 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
*
* 输出
* @author daniel
* @email 576699909@qq.com
* @time 2016-6-12 下午12:27:40
*/
public class ZMain {
/**
* @param args
*/
public static void main(String[] args) {
UnitedNationsSecurityCouncil UNSC = new UnitedNationsSecurityCouncil();
USA c1 = new USA(UNSC);
Iraq c2 = new Iraq(UNSC);
UNSC.setColleague1(c1);
UNSC.setColleague2(c2);
c1.declare("美国说 我要吃饭");
c2.declare("伊拉克说 没饭吃喽");
}
}
输出结果
美国获得对方信息:美国说 我要吃饭
美国获得对方信息:伊拉克说 没饭吃喽
源码
https://github.com/dingsai88/StudyTest/tree/master/src/ding/study/designpatterns/mediator相关文章推荐
- 基于Java8的日志类实现
- 浅谈Java自动装箱与拆箱及其陷阱
- 解决eclipse字体太小问题
- 初学 retrofit2与RXJava 的搭配使用
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- 【Java编程】写入、读取、遍历Properties文件
- java移位运算
- 【JAVA】J2EE之容器
- HBase学习笔记1 - 如何编写高性能的客户端Java代码
- Spring配置JNDI的解决方案
- Eclipse for Mac 常用快捷键
- websocket+springmvc 简单的demo实现
- Java JavaWeb 定时任务
- Servlet复习
- Spring 中如何使用外部属性文件
- eclipse中java项目转成Web项目
- JAVA中使用FTPClient实现文件上传下载实例代码
- Struts2学习笔记(5)-参数传递方法
- SQL转JAVA字符串 小工具
- Java transient关键字