版权声明:转载请注明出处: https://blog.csdn.net/qq_21687635/article/details/85208858
模式定义
中介者模式来集中相关对象之间复杂的沟通和控制方式。
下图是该模式的类图:
使用中介者之前,各个对象之间相互依赖,如下图所示:
使用中介者模式之后,各个对象之间的联系让中介者解耦了,如下图所示:
一个生动的例子
假如有个人喜欢另一个人,但是他不敢直接告诉那个人,所以他就想找个中间人把消息告诉这个中间人,然后再由中间人把这个消息告诉他喜欢的那个人。这个中间人的角色就是中介者。
Mediator抽象类:
public abstract class Mediator {
abstract void contact(String content, Person person);
}
Mediator具体类:
class ConcreteMediator extends Mediator {
Male male;
Female female;
@Override
public void contact(String content, Person person) {
if (person == male) {
female.getMessage(person, content.replace("我", "他"));
} else {
male.getMessage(person, content.replace("我", "她"));
}
}
public Male getMale() {
return male;
}
public void setMale(Male male) {
this.male = male;
}
public Female getFemale() {
return female;
}
public void setFemale(Female female) {
this.female = female;
}
}
Colleague类:
public class Person {
protected String name;
protected Mediator mediator;
public Person(String name, Mediator mediator) {
this.name = name;
this.mediator = mediator;
}
public String getName() {
return name;
}
}
Colleague具体类:
class Male extends Person {
public Male(String name, Mediator mediator) {
super(name, mediator);
}
public void getMessage(Person person, String message) {
System.out.println(name + ":" + person.getName() + "她说" + message);
}
public void contact(String message) {
mediator.contact(message, this);
}
}
Colleague具体类:
class Female extends Person {
public Female(String name, Mediator mediator) {
super(name, mediator);
}
public void getMessage(Person person, String message) {
System.out.println(name + ":" + person.getName() + "他说" + message);
}
public void contact(String message) {
mediator.contact(message, this);
}
}
测试类/客户端类:
public class MediatorTest {
public static void main(String[] args) {
ConcreteMediator mediator = new ConcreteMediator();
Male male = new Male("张三", mediator);
Female female = new Female("翠花", mediator);
mediator.setMale(male);
mediator.setFemale(female);
male.contact("我喜欢你!");
female.contact("我不喜欢你,滚!");
}
}
参考
- Head First 设计模式[书籍]
- 博客园之中介者模式