再战设计模式(十四)之行为型-中介模式

中介模式

核心:

 现在我们使用代码来实现下中介模式.

主要有3个部门研发部,市场部 财务部,他们要相互调用,我们通过总经理来实现他们调用的解耦.

类图:

Mediator类是中间类的接口

president是总经理要进行处理各个部门调用的逻辑 他实现了 mediator接口

Department 是部门接口 里面有俩个方法,一个是自己部门做的事情,一个是需要向外部交互的的事情

market development finance 这个是部门接口的子类.

代码如下:

/**
 * 中介接口...
 * @Created by xiaodao
 */
public interface Mediator {

    void register(String dname,Deparment deparment);

    void command(String name);
}

/**
 * @Created by xiaodao
 */
public class President implements Mediator {


    private Map<String,Deparment> map = new HashMap<>();

    @Override
    public void register(String dname, Deparment deparment) {
        map.put(dname,deparment);
    }

    /***
     * 这里可以做些逻辑
     * @param name
     */
    @Override
    public void command(String name) {
            map.get(name).selfAction();

    }
}



/**
 * @Created by xiaodao
 */
public interface Deparment {

    void  selfAction();//做本部门的事情

    void outAction();//向总经理发出申请
}



/**
 * 研发部门
 * @Created by xiaodao
 */
public class Development implements Deparment{


    private Mediator m;

    public Development(Mediator m) {
        this.m = m;
        m.register("development",this);
    }

    @Override
    public void selfAction() {
        System.out.println("专心开发项目");
    }

    @Override
    public void outAction() {

        System.out.println("汇报工作,,需要资金支持");
    }
}


/**
 * 财务部门
 * @Created by xiaodao
 */
public class Finance implements Deparment {
   private Mediator m ;

    public Finance(Mediator m) {
        this.m = m;
        m.register("finance",this);
    }

    @Override
    public void selfAction() {
        System.out.println("专心..算钱");
    }

    @Override
    public void outAction() {

        System.out.println("钱太多了....怎么办?");
        m.command("finance");
    }
}


/**
 * 市场部
 * @Created by xiaodao
 */
public class Market implements Deparment {
   private Mediator m ;

    public Market(Mediator m) {
        this.m = m;
        m.register("Market",this);
    }

    @Override
    public void selfAction() {
        System.out.println("加大力度,扩展市场....");
    }

    @Override
    public void outAction() {

        System.out.println("市场扩展需要钱......");
    }
}



/**
 * @Created by xiaodao
 */
public class Client {

    public static void main(String[] args) {
        Mediator m = new President();
        Market market = new Market(m);
        Finance f = new Finance(m);

        market.selfAction();
        f.outAction();
    }
}

当我调用市场部的outAction 里面他就向总经理发起了一个命令申请,然后由总经理去调用财务部,实现部门之间的解耦

总结:

中介模式的本质是,解耦类与类之间的调用关系,但是如果处理不好,起来类会变得繁多.

对比门面模式

facade模式是由一个方法提供多个方法的调用,实现简单化,他是单向的

,中介模式是提供类与类的双向调用,实现解耦.

这里我写代码对于理解这个模式略过复杂化,其实简单来讲 就是俩个类直接调用,变为使用中介者,进行调用.

原文地址:https://www.cnblogs.com/bj-xiaodao/p/10863448.html