欢迎来到Vincentyw的博客

该来的终究会来,该走的也一定会离开。凡事都存在前因后果,因缘成熟了,果报便产生了,无法阻挡。
但是发生过了就会消失,有来就有走,一切都是过客,把握自己当下的因缘,承担起自己该承担的责任,做好眼前该做的事情,做的时候尽全力,过去便放下,放下即自在。

设计模式之中介者模式

Mediator(中介者模式)

一、中介者模式简介

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

核心:

  • 1、用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用
  • 2、主要解决对象与对象之间存在大量的关联关系
  • 3、将网状结构分离为星型结构

二、中介者模式优缺点比较

优点:

  • 1、降低了类的复杂度,将一对多转化成了一对一
  • 2、各个类之间的解耦
  • 3、符合迪米特原则

缺点:

  • 1、中介者庞大,变得复杂难以维护

使用场景:

  • 1、MVC框架
  • 2、房屋中介、机场调度

注意事项:不应当在职责混乱的时候使用。

三、UML类图

 

四、设计实现

步骤1:创建部门接口

public interface Department {
     //内部处理事务
    void selfAction();
    //外部事物
    void outAction(String dname);
}

步骤2:创建实现部门接口的具体实现类

//开发部门
public class Development implements Department {
    //中介者引用
    private Mediator m; 

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

    @Override
    public void selfAction() {
        System.out.println("001负责产品开发");
    }

    @Override
    public void outAction(String dname) {
        System.out.println("001请求资金支持");
        m.command(dname);
    }
}

//财务部门
public class Financial implements Department{
    //中介者引用
    private Mediator m;

    public Financial(Mediator t) {
        this.m = t;
        m.register("002", this);
    }

    @Override
    public void selfAction() {
        System.out.println("002负责拨款");
    }

    @Override
    public void outAction(String dname) {
        System.out.println(dname+"收款确认");
        m.command(dname);
    }

}

步骤3:创建中介者接口

//中介者
public interface Mediator {
    //建立联系
    void register(String dname,Department d);
    //协调处理事务
    void command(String dname);
}

步骤4:创建实现中介接口的实体类

public class President implements Mediator {
    private Map<String,Department> map = new HashMap<>();
    

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

    @Override
    public void command(String dname) {
        map.get(dname).selfAction();
    }
}

步骤5:调用者测试

public class MediatorDemo {
    public static void main(String[] args) {
        Mediator p = new President();
        Development d = new Development(p);
        Financial f = new Financial(p);
        d.selfAction();
        d.outAction("002");
        f.selfAction();
        f.outAction("001");
    }
}

步骤6:运行程序,观察结果

 

posted on 2020-04-08 13:11  VincentYew  阅读(210)  评论(0)    收藏  举报

导航