用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
public class Mediator_Main {
public static void main(String[] args) {
Colleague colleague_a = new Colleague_A();
Colleague colleague_b = new Colleague_B();
Mediator mediator = new AbstractMediator(colleague_a,colleague_b);
mediator.sendMessage(colleague_a,"今天天气不错哦");
System.out.println("-------------");
mediator.sendMessage(colleague_b,"你开心就好");
}
}
abstract class Mediator{
protected Colleague colleague_a;
protected Colleague colleague_b;
public Mediator(Colleague colleague_a, Colleague colleague_b) {
this.colleague_a = colleague_a;
this.colleague_b = colleague_b;
}
abstract void sendMessage(Colleague colleague, String message);
}
//主要逻辑交给中介,同事互相之间没有任何的依赖关系
class AbstractMediator extends Mediator{
public AbstractMediator(Colleague colleague_a, Colleague colleague_b) {
super(colleague_a, colleague_b);
}
@Override
public void sendMessage(Colleague colleague,String message) {
if (colleague == colleague_a){
colleague_a.call(colleague_b);
colleague_b.getMessage(message);
}else {
colleague_b.call(colleague_a);
colleague_a.getMessage(message);
}
}
}
interface Colleague{
void call(Colleague colleague);
void getMessage(String message);
}
class Colleague_A implements Colleague{
@Override
public void call(Colleague colleague) {
System.out.println("同事A打电话给:" + colleague.getClass().getName());
}
@Override
public void getMessage(String message) {
System.out.println("同事A获得消息:" + message);
}
}
class Colleague_B implements Colleague{
@Override
public void call(Colleague colleague) {
System.out.println("同事B打电话给:" + colleague.getClass().getName());
}
@Override
public void getMessage(String message) {
System.out.println("同事B获得消息:" + message);
}
}