用一个中介对象来封装一系列的对象交互,使各对象不需要显示地相互调用
Mediator.java
package com.gary.designpattern.mediator;
/**
* 中介者
* @author gary
*
*/
public interface Mediator {
public void send(String message, Person person);
}
MediatorImpl.java
package com.gary.designpattern.mediator;
public class MediatorImpl implements Mediator {
//中介者需要知道所有具体对象
private PersonA personA;
private PersonB personB;
public void setPersonA(PersonA personA) {
this.personA = personA;
}
public void setPersonB(PersonB personB) {
this.personB = personB;
}
@Override
public void send(String message, Person person) {
if(person.equals(personA)){
personA.greeting(message);
}else{
personB.greeting(message);
}
}
}
Person.java
package com.gary.designpattern.mediator;
public abstract class Person {
protected Mediator mediator;
public Person(Mediator mediator) {
this.mediator = mediator;
}
}
PersonA.java
package com.gary.designpattern.mediator;
public class PersonA extends Person {
public PersonA(Mediator mediator) {
super(mediator);
}
/**
* 通过中介者发送信息
* @param message
*/
public void send(String message){
mediator.send(message, this);
}
public void greeting(String message){
System.out.println("PersonA: " + message);
}
}
PersonB.java
package com.gary.designpattern.mediator;
public class PersonB extends Person {
public PersonB(Mediator mediator) {
super(mediator);
}
/**
* 通过中介者发送信息
* @param message
*/
public void send(String message){
mediator.send(message, this);
}
public void greeting(String message){
System.out.println("PersonB: " + message);
}
}
Test.java
package com.gary.designpattern.mediator;
/**
* 测试
* @author gary
*
*/
public class Test {
public static void main(String[] args) {
MediatorImpl ci = new MediatorImpl();
//让具体对象认识中介者
PersonA personA = new PersonA(ci);
PersonB personB = new PersonB(ci);
//让中介者认识具体对象
ci.setPersonA(personA);
ci.setPersonB(personB);
//通过中介者转发
personA.send("Hello B!");
personB.send("Hi A!");
}
}