zoukankan      html  css  js  c++  java
  • 设计模式:中介模式

      中介这个词语在现实生活中很常见,我们买房租房找中介,通过中介完成买卖房屋,买房和卖方直接和中介交流,完成交易合同。

    房产中介,第三方平台,支付宝这些等都属于中介。他们在中间从当一个中间人的作用,承担交易双方的业务流程。

    核心:中介者对象,该对象使一些复杂的业务处理简化,使各业务处理对象直接和中介者打交道。

    例子:模拟公司业务处理。总经理充当中介者角色,负责协调各部门。

    /**
     * 中介者抽象接口
     */
    public interface Mediator {
        //管理对象
        void register(String name, Department departMent);
        //调用对象
        void command(String something);
    }
    

      

    /**
     * 部门内部对象接口
     */
    public interface Department {
        //完成部门任务
        void doSomeThing();
        //向中介者汇报,通知中介者调用
        void apply();
    }
    

      

    public class FinacialDepartment implements Department {
    
        //持有中介者对象
        private Mediator mediator;
    
        public FinacialDepartment(Mediator mediator) {
            this.mediator = mediator;
            mediator.register("finacial", this);
        }
    
        @Override
        public void doSomeThing() {
            System.out.println("财务部门工作");
        }
    
        @Override
        public void apply() {
            System.out.println("财务汇报工作");
        }
    }
    

      

    /**
     * 研发部门
     */
    public class Development implements Department {
    
        //持有中介者对象
        private Mediator mediator;
    
        public Development(Mediator mediator) {
            this.mediator = mediator;
            mediator.register("development", this);
        }
    
        @Override
        public void doSomeThing() {
            System.out.println("研发部门工作");
        }
    
        @Override
        public void apply() {
            System.out.println("研发部门汇报工作需要财务部门支持。");
            //通知中介者,调用其他对象方法
            mediator.command("finacial");
    
        }
    }
    

      

    /**
     * 具体中介者
     */
    public class Manager implements Mediator {
    
        private Map<String, Department> map = new HashMap<>();
    
        @Override
        public void register(String name, Department departMent) {
            map.put(name, departMent);
        }
    
        @Override
        public void command(String something) {
            map.get(something).doSomeThing();
        }
    }
    

      

    public class Client {
        public static void main(String[] args) {
            //中介者
            Mediator manager = new Manager();
            //各部门对象,中介者需要对接到具体对象
            Department devop = new Development(manager);
            Department finaical = new FinacialDepartment(manager);
        
            devop.doSomeThing();
            //通过向中介者发出申请,间接完成具体对象的调用
            devop.apply();
        }
    }
    

      这个简单例子中,通过中介者Manager使各部门交互关系解耦,每个对象持有中介者对象引用,只跟中介者对象打交道。

    简化了对象之间的关系,将系统的各个对象之间的相互关系进行封装,将各个同事类解耦,使得系统变为松耦合。

    当在业务处理中需要协调多个对象的关系,而又不需要去增加子类方法处理时可以考虑该模式。

  • 相关阅读:
    [LeetCode] Binary Tree Preorder Traversal
    Linux下搭建JSP环境
    Linux系统捕获数据包流程
    如何使用Linux套接字?
    IPod在Linux下的实战
    将手机流氓软件彻底赶出去
    如何修复和检测Windows系统漏洞
    防止网络渗透措施两则
    Cisco安全防护读书笔记之一Cisco系统设备协议漏洞
    至顶网推荐-Rpm另类用法加固Linux安全
  • 原文地址:https://www.cnblogs.com/gcm688/p/10279356.html
Copyright © 2011-2022 走看看