zoukankan      html  css  js  c++  java
  • 再战设计模式(十四)之行为型-中介模式

    中介模式

    核心:

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

    主要有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模式是由一个方法提供多个方法的调用,实现简单化,他是单向的

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

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

  • 相关阅读:
    Django系列6:Model简介,ORM,字段类型,约束
    Django系列4:数据常规操作级联数据
    Django系列5:脑图总结
    Sorted Adjacent Differences
    C
    E. Sleeping Schedule
    D. Ehab the Xorcist
    C. Game with Chips
    D. Walk on Matrixv
    Circle of Monsters
  • 原文地址:https://www.cnblogs.com/bj-xiaodao/p/10863448.html
Copyright © 2011-2022 走看看