天天看點

GOF——中介者模式

當類過多且他們之間的關系過于複雜時,引入中介者類,是這些類達到解耦.

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();

    }
}