中介模式
核心:
现在我们使用代码来实现下中介模式.
主要有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模式是由一个方法提供多个方法的调用,实现简单化,他是单向的
,中介模式是提供类与类的双向调用,实现解耦.
这里我写代码对于理解这个模式略过复杂化,其实简单来讲 就是俩个类直接调用,变为使用中介者,进行调用.