zoukankan      html  css  js  c++  java
  • 中介者模式小记【原创】

    几天没写设计模式的总结了,工作上要学的事情多,觉得写写挺麻烦。可是这几天下来发现没写总结后,新学的几个模式之间的区别都搞混淆了,看来做学问真的是没有捷径的。写吧!

    先来看一个公司的部门关系

    怎么样,由于各个部门之间都会有交互,是不是显得逻辑很混乱?可想而知,就算实现了,日后维护也是相当困难的。于是就有了中介者模式:

    中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地互相引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单的说,就是一个星型拓扑图

    抽象中介者类:

    public abstract class AbstractMediator {
    protected Purchase purchase;
    protected Sale sale;
    protected Stock stock;
    //构造函数
    public AbstractMediator(){
    purchase = new Purchase(this);
    sale = new Sale(this);
    stock = new Stock(this);
    }
    //中介者最重要的方法,叫做事件方法,处理多个对象之间的关系
    public abstract void execute(String str,Object...objects);
    }

    抽象同事类:

    public abstract class AbstractColleague {
    protected AbstractMediator mediator;
    public AbstractColleague(AbstractMediator _mediator){
    this.mediator = _mediator;
    }
    }

    具体的中介者和具体的同事类就不贴出来了,无非是通过多态调用父类的方法。客户端有必要提一下:

    public class Client {
    public static void main(String[] args) {
    AbstractMediator mediator = new Mediator();
    //采购人员采购电脑
    System.out.println("------采购人员采购电脑--------");
    Purchase purchase = new Purchase(mediator);
    purchase.buyIBMcomputer(100);
    //销售人员销售电脑
    System.out.println("\n------销售人员销售电脑--------");
    Sale sale = new Sale(mediator);
    sale.sellIBMComputer(1);
    //库房管理人员管理库存
    System.out.println("\n------库房管理人员清库处理--------");
    Stock stock = new Stock(mediator);
    stock.clearStock();
    }
    }

          我觉得这里有个比较重要的地方是,需要将中介者注入到每一个具体的同事类中,并且具体的中介者中也有各个同事类的对象,他们是相互关联的。

          中介者模式的优点就是减少类间的依赖,把原有的一对多的依赖变成了一对一的依赖,同事类只依赖中介者,减少了依赖,当然也同时减低了类间的耦合。它的缺点呢就是中介者会膨胀的很大,而且逻辑会很复杂,因为所有的原本N个对象直接的相互依赖关系转换为中介者和同事类的依赖关系,同事类越多,中介者的逻辑就复杂。

          一句话概括中介者模式:桥接模式+子类依赖关系!

  • 相关阅读:
    JVM — 类加载机制
    java 异常处理
    (前篇:NIO系列 推荐阅读) Java NIO 底层原理
    (六:NIO系列) 相关设计模式
    (五:NIO系列) Reactor模式
    (四:NIO系列) Java NIO Selector
    (三:NIO系列) Java NIO Channel
    (二:NIO系列) Java NIO Buffer
    (一:NIO系列)JAVA NIO 简介
    java 线程池(线程的复用)
  • 原文地址:https://www.cnblogs.com/winkey4986/p/2445281.html
Copyright © 2011-2022 走看看