當類過多且他們之間的關系過于複雜時,引入中介者類,是這些類達到解耦.
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();
}
}