一、背景
试想如果每台计算机之间通信,我们都在这两台计算机之间拉一根网线,如果多台计算机之间通信的话是不是就要每台(除了它自己)和其他的所有计算机拉一根网线,这样形就会形成复杂的网状结构,搭建网络的成本可想而知有多高。看到这里是不是想到了我们学计算机网络的时候通过星状结构便能解决此问题。多台计算机之间放一个路由器,每台计算机都和该路由器相连,计算机之间通信通过该路由器进行转发,这样便大大减少了网线的条数。中介者模式正是这样的思想。
二、概念
中介者模式:用一个中介对象来封装一系统对象交互,中介者使得对象间不需要显示地引用,使各对象之间松耦合,从而可以独立地改变他们之间的交互。
三、代码实例
/**
* 中介者接口
*/
interface Mediator {
public void createMediator();
public void forward();
}
/**
* 具体中介者 相当于路由器
*/
class MyMediator implements Mediator {
private IComputer computerA;
private IComputer computerB;
@Override
public void createMediator() {
computerA = new ComputerA();
computerB = new ComputerB();
}
@Override
public void forward() {
computerA.sendMessageTo(computerB);
}
}
/**
* 计算机抽象类
*/
interface IComputer {
public void sendMessageTo(IComputer computer);
public void acceptMessageFrom(IComputer computer);
}
/**
* 具体计算机A 中介者管理的具体角色
*/
class ComputerA implements IComputer {
@Override
public void sendMessageTo(IComputer computer) {
System.out.println(this + ":sendMessage to:" + computer);
computer.acceptMessageFrom(this);
}
@Override
public void acceptMessageFrom(IComputer computer) {
System.out.println(this + ":acceptMessage from:" + computer);
}
}
/**
* 具体计算机B 中介者管理的具体角色
*/
class ComputerB implements IComputer {
@Override
public void sendMessageTo(IComputer computer) {
System.out.println(this + ":sendMessage to:" + computer);
computer.acceptMessageFrom(this);
}
@Override
public void acceptMessageFrom(IComputer computer) {
System.out.println(this + ":acceptMessage from:" + computer);
}
}
public class MediatorPatternDemo {
public static void main(String[] args) {
Mediator mediator = new MyMediator();
mediator.createMediator();
mediator.forward();
}
}
四、总结
1.中介者模式使得各实体类之间的网状结构变为星状结构,极大地减轻了类之间的耦合度。
2.使用中介者模式,只需关心各个实体类和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行。