先看图:
有很多孤立的人这里是3个,如果有100个,是不是图很复杂,那在程序中表示出来就很难。明显用右图很明了。
中介者模式就是简化这种关系的模式,有两个角色:关系成员、中介者。我一般喜欢从语法上分析:
中介者:包含每一个关系成员,要处理所有的关系,就要包含是所有的成员。只有一个方法:用来第一成员关系的。
abstract class Mediator {
abstract void call(String string, Person person);
}
具体中介者:call是处理关系的,主要的方法。
public class AllMediator extends Mediator {
Aperson aperson;
Bperson bperson;
Cperson cperson;
public Aperson getAperson() {
return aperson;
}
public void setAperson(Aperson aperson) {
this.aperson = aperson;
}
public Bperson getBperson() {
return bperson;
}
public void setBperson(Bperson bperson) {
this.bperson = bperson;
}
public Cperson getCperson() {
return cperson;
}
public void setCperson(Cperson cperson) {
this.cperson = cperson;
}
@Override
void call(String string, Person person) {
if (person == aperson) {
aperson.re(string);
} else if (person == bperson) {
bperson.re(string);
} else if (person == cperson) {
cperson.re(string);
}
}
}
成员,不必包含与他有关系的成员,他只需包含一个中介者,通过中介发消息,是委托给中介。他有一个发消息的方法,中介通过判定成员来确定恢复消息。
abstract class Person {
String name;
Mediator mediator;
Person(String name, Mediator mediator) {
this.mediator = mediator;
this.name = name;
}
abstract void call(String mess);
abstract void re(String mess);
}
A:
public class Aperson extends Person {
Aperson(String name, Mediator mediator) {
super(name, mediator);
}
@Override
void call(String mess) {
mediator.call(mess, this);
}
@Override
void re(String mess) {
System.out.println(name + ":" + mess);
}
}
B:
public class Bperson extends Person {
Bperson(String name, Mediator mediator) {
super(name, mediator);
}
@Override
void call(String mess) {
mediator.call(mess, this);
}
@Override
void re(String mess) {
System.out.println(name + ":" + mess);
}
}
C:
public class Cperson extends Person {
Cperson(String name, Mediator mediator) {
super(name, mediator);
}
@Override
void call(String mess) {
mediator.call(mess, this);
}
@Override
void re(String mess) {
System.out.println(name + ":" + mess);
}
}
测试
class Test {
public static void main(String[] args) {
AllMediator mediator = new AllMediator();
Aperson aperson = new Aperson("A同学", mediator);
Bperson bperson = new Bperson("B同学", mediator);
Cperson cperson = new Cperson("C同学", mediator);
mediator.setAperson(aperson);
mediator.setBperson(bperson);
mediator.setCperson(cperson);
aperson.call("告诉B,我明天不去了");
bperson.call("告诉C,我明天不去了");
}
}
结果:
A同学:告诉B,我明天不去了
B同学:告诉C,我明天不去了