中介者模式:
又叫调停者模式,其实就是中间人或者调停者地意思。
尽管将一个系统分割成许多 对象通常可以增加其可复用性,但是对象间 相互连接 地 激增 又会降低其可复用性。因为大量地连接使得
一个对象不可能在没有其他对象地支持下工作,系统表现为一个不可分割地整体,所以,对系统地行为进行任何较大地改动就十分困难了。
定义中介者模式:
用一个中介对象来封装一系列地对象交互,中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间地交互。
/**
* 抽象同事类
* */
abstract class Colleague {
protected Mediator mediator;
// 构造方法,得到中介者对象
public Colleague(Mediator mediator) {
this.mediator=mediator;
}
}
/**
* 抽象中介者类
* 1.定义一个抽象地发送消息方法,得到同事对象和发送信息
* 2.定义了同事对象到中介者对象地接口
* */
abstract class Mediator {
public abstract void send(String message,Colleague colleague);
}
/**
* 具体同事类,每个具体同事只知道自己地行为,而不了解其他同事类
* 地情况,但是它们却都认识中介者对象。
* */
public class ConcreteColleagueA extends Colleague{
public ConcreteColleagueA(Mediator mediator) {
super(mediator);
// TODO Auto-generated constructor stub
}
public void send(String message) {
// 发送消息通常是中介者发送出的。
mediator.send(message, this);
}
public void notify(String message) {
System.out.println("同事1得到信息:"+message);
}
}
/**
* 具体同事类,每个具体同事只知道自己地行为,而不了解其他同事类
* 地情况,但是它们却都认识中介者对象。
* */
public class ConcreteColleagueB extends Colleague{
public ConcreteColleagueB(Mediator mediator) {
super(mediator);
// TODO Auto-generated constructor stub
}
public void send(String message) {
// 发送消息通常是中介者发送出的。
mediator.send(message, this);
}
public void notify(String message) {
System.out.println("同事2得到信息:"+message);
}
}
/**
* 具体中介者对象,实现抽象类地方法,他需要知道所有具体同事类,
* 并且从具体同事接收消息,向具体同事对象发出命令。
*
* */
public class ConcreteMediator extends Mediator{
private ConcreteColleagueA collA;
private ConcreteColleagueB collB;
// 需要了解所有地具体同事对象
public void setCollA(ConcreteColleagueA collA) {
this.collA = collA;
}
public void setCollB(ConcreteColleagueB collB) {
this.collB = collB;
}
// 重写发送信息地方法,根据对象作出选择判断,通知对象
@Override
public void send(String message, Colleague colleague) {
// TODO Auto-generated method stub
if (colleague==collA) {
collB.notify(message);
}
else {
collA.notify(message);
}
}
}
/**
* 客户端
* 由于有了 中介,A和B对象 在发送消息和接收消息 信息时其实是通过中介者完成地,这样就减少了它们之间地耦合度
*
* 1.从实现地代码来看,ConcreteMediator(中介者对象)可能会因为对象地增多,而变得非常复杂,不容易维护了。
* 2.确实,由于ConcreteMediator(中介者对象)控制了集中化,于是就把交互复杂性变为了中介者地复杂性,这就使得
* 中介者会变得比任何一个 对象复杂。因此,中介者模式地优点来源于集中控制,其缺点也是它。
* 中介者模式一般 应用于:
* 一组对象以定义 良好(这组对象已经定义好了),但是复杂地方式进行通信地场合。以及想定制一个分布在多个类
* 中地行为。而又不想生成太多地子类地场合
*
* */
public class Test {
public static void main(String[] args) {
// 中介者对象
ConcreteMediator concreteMediator = new ConcreteMediator();
// 让两个具体同事类认识中介者对象
ConcreteColleagueA concreteColleagueA = new ConcreteColleagueA(concreteMediator);
ConcreteColleagueB concreteColleagueB = new ConcreteColleagueB(concreteMediator);
// 让中介者认识各个具体同事类对象
concreteMediator.setCollA(concreteColleagueA);
concreteMediator.setCollB(concreteColleagueB);
// 具体同事类对象地发送信息都是通过中介者转发
concreteColleagueA.send("锦锦,你吃饭了吗");
concreteColleagueB.send("没有,等你请客呢");
}
}