当类过多且他们之间的关系过于复杂时,引入中介者类,是这些类达到解耦.
interface Mediate {
void getOut(String str);
void getIn(String str);
void set(String str, Department department);
}
class GeneralManager implements Mediate {
private Map<String, Department> map = new HashMap<>();
public void set(String str, Department department) {
map.put(str, department);
}
public void getOut(String str) {
map.get(str).out();
}
@Override
public void getIn(String str) {
map.get(str).in();
}
}
interface Department {
void in();
void out();
}
class ProjectDepartment implements Department {
private Mediate mediate;
public ProjectDepartment(Mediate mediate) {
this.mediate = mediate;
}
@Override
public void in() {
System.out.println("项目组-->接项目");
mediate.getOut("finance");
}
@Override
public void out() {
System.out.println("项目组-->出项目");
mediate.getIn("finance");
}
}
class FinanceDepartment implements Department {
private Mediate mediate;
public FinanceDepartment(Mediate mediate) {
this.mediate = mediate;
}
@Override
public void in() {
System.out.println("财务部-->收钱");
}
@Override
public void out() {
System.out.println("财务部-->发钱");
}
}
/**
* 中介者模式
*/
public class Mediator {
public static void main(String[] args) {
Mediate mediate = new GeneralManager();
Department projectDepartment = new ProjectDepartment(mediate);
Department financeDepartment = new FinanceDepartment(mediate);
mediate.set("finance", financeDepartment);
projectDepartment.in();
projectDepartment.out();
}
}