优点:
- 减少类间的依赖(同事类只依赖中介者)
- 降低类间的耦合
缺点:
- 中介会膨胀得很大,逻辑复杂
应用场景:
- 类的依赖关系,呈现网状的
抽象人物类
package com.memory.mediator;
/**
* 抽象角色
*
* @author Administrator
*
*/
public abstract class Person {
protected PreMediator mPreMediator;
public Person(PreMediator mediator) {
this.mPreMediator = mediator;
}
/**
* 发送通知
*
* @param messageee
*/
public abstract void send(String msg);
/**
* 接收信息
*
* @param msg
*/
public abstract void getNotice(String msg);
}
具体同事角色
package com.memory.mediator;
/**
* 老师
*
* @author Administrator
*
*/
public class Teacher extends Person {
public Teacher(PreMediator mediator) {
super(mediator);
// TODO Auto-generated constructor stub
}
@Override
public void send(String msg) {
// TODO Auto-generated method stub
System.out.println("老师发送通知" + msg);
mPreMediator.notice(this, msg);
}
@Override
public void getNotice(String msg) {
// TODO Auto-generated method stub
System.out.println("老师收到回复" + msg);
}
}
package com.memory.mediator;
/**
* 学生
* @author Administrator
*
*/
public class Student extends Person {
public Student(PreMediator mediator) {
super(mediator);
// TODO Auto-generated constructor stub
}
@Override
public void send(String msg) {
// TODO Auto-generated method stub
System.out.println("学生发送消息" + msg);
mPreMediator.notice(this, msg);
}
@Override
public void getNotice(String msg) {
// TODO Auto-generated method stub
System.out.println("学生收到消息" + msg);
}
}
抽象中介角色
package com.memory.mediator;
/**
* 学生会中介
* @author Administrator
*
*/
public interface PreMediator {
void notice(Person person,String msg);//通知方法
}
具体中介角色
package com.memory.mediator;
/**
* 学生会主席
*
* @author Administrator
*
*/
public class PreStudent implements PreMediator {
Student mStudent;// 学生
Teacher mTeacher;// 老师
public void setStudent(Student student) {
this.mStudent = student;
}
public void setTeacher(Teacher teacher) {
this.mTeacher = teacher;
}
@Override
public void notice(Person person, String msg) {
// TODO Auto-generated method stub
System.out.println("学生会收信息,并转发给相应的目录人群");
if (person == mTeacher) {
mStudent.getNotice(msg);
} else if (person == mStudent) {
mTeacher.getNotice(msg);
}
}
}
测试
// 中介者模式
PreStudent preMediator = new PreStudent();
Teacher teacher = new Teacher(preMediator);
Student student = new Student(preMediator);
preMediator.setTeacher(teacher);
preMediator.setStudent(student);
teacher.send("明天临时补课");
System.out.println("===================");
student.send("明天请假");
/输出/
启动应用成功!开启美好的一天
老师发送通知明天临时补课
学生会收信息,并转发给相应的目录人群
学生收到消息明天临时补课
===================
学生发送消息明天请假
学生会收信息,并转发给相应的目录人群
老师收到回复明天请假