中介者模式用一个中介对象来封装一系列的对象交互,从而使它们可以较松散的耦合。
1) 抽象中介者(Mediator)角色:抽象中介者角色定义统一的接口用于各同事角色之间的通信。
2) 具体中介者(Concrete
Mediator)角色:具体中介者角色通过协调各同事角色实现协作行为。为此它要知道并引用各个同事角色。
3) 同事(Colleague)角色:每一个同事角色都知道对应的具体中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。
在此写了7个java类来描述说明Mediator设计模式的实现方式;
1、
Colleague.java 交互对象的抽象类
2、 Colleague1.java 交互对象1
3、 Colleague2.java 交互对象2
4、 Colleague3.java 交互对象3
5、 Mediator.java 中介者抽象类
6、 ConcreteMediator.java 具体的中介者
7、 MediatorTest.java 带有main方法的测试类
=============== 1、
Colleague.java
交互对象的抽象类,定义了中介者的注入方法 、交互的行为方法
package mediator;
public abstract class Colleague {
//中介者
private Mediator mediator;
public Mediator getMediator() {
return mediator;
}
public Colleague(Mediator m) {
mediator = m;
}
//消息
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
//发送消息
public abstract void sendMsg();
//收到消息
public abstract void getMsg(String msg);
//发送消息
public void sendMsg(String msg) {
this.message = msg;
mediator.action(this);
}
}
=============== 1 end
=============== 2、
Colleague1.java
package mediator;
public class Colleague1 extends Colleague {
public Colleague1(Mediator m) {
super(m);
}
public void getMsg(String msg) {
System.out.println("Colleague1 has got the
message -'" + msg + "'");
}
public void sendMsg() {
System.out.println("Colleague1 has send the message
'" + getMessage() + "'");
}
}
=============== 2 end
=============== 3、
Colleague2.java
package mediator;
public class Colleague2 extends Colleague {
public Colleague2(Mediator m) {
super(m);
}
public void getMsg(String msg) {
System.out.println("Colleague2 has got the
message -'" + msg + "'");
}
public void sendMsg() {
System.out.println("Colleague2 has send the message
'" + getMessage() + "'");
}
}
=============== 3 end
=============== 4、
Colleague3.java
package mediator;
public class Colleague3 extends Colleague {
public Colleague3(Mediator m) {
super(m);
}
public void getMsg(String msg) {
System.out.println("Colleague3 has got the
message -'" + msg + "'");
}
public void sendMsg() {
System.out.println("Colleague3 has send the message
'" + getMessage() + "'");
}
}
=============== 4 end
=============== 5、
Mediator.java
package mediator;
abstract class Mediator {
//Mediator针对Colleague的一个交互行为
public abstract void action(Colleague sender);
//加入Colleague对象
public abstract void addCollegue(Colleague colleague);
}
=============== 5 end
=============== 6、
ConcreteMediator.java
具体的中介者,负责管理Colleague对象间的关系、以及Colleague对象间的交互
package mediator;
import java.util.ArrayList;
import java.util.List;
public class ConcreteMediator extends Mediator {
private List<Colleague> colleagues = new
ArrayList<Colleague>(0);
public void addCollegue(Colleague colleague) {
colleagues.add(colleague);
}
public void action(Colleague actor) {
String msg = actor.getMessage();
//send msg
for (Colleague colleague : colleagues) {
if(colleague.equals(actor)){
colleague.sendMsg();
break;
}
}
//got msg
for (Colleague colleague : colleagues) {
if(colleague.equals(actor))
continue;
colleague.getMsg(msg);
}
}
}
=============== 6 end
=============== 7、
MediatorTest.java
package mediator;
public class MediatorTest {
public static void main(String[] args) {
//生成中介者 并注入到各个Colleague对象中
Mediator mediator = new ConcreteMediator();
Colleague colleague1 = new Colleague1(mediator);
Colleague colleague2 = new Colleague2(mediator);
Colleague colleague3 = new Colleague3(mediator);
//注册对象到中介
mediator.addCollegue(colleague1);
mediator.addCollegue(colleague2);
mediator.addCollegue(colleague3);
//Colleague1 触发行为
colleague1.sendMsg("Hi,it's time to lunch. Let's
go!");
System.out.println();
//Colleague2 触发行为
colleague2.sendMsg("Is anybody here!");
System.out.println();
//Colleague3 触发行为
colleague3.sendMsg("Wait!I will lunch off right away.");
System.out.println();
}
}
=============== 7 end