首页 > 其他分享 >中介者模式(Mediator )

中介者模式(Mediator )

时间:2022-11-26 12:33:20浏览次数:50  
标签:研发部门 Mediator dname void 模式 中介 public

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

场景:

  公司多个部门之间,若直接互相打交道,则会形成网状结构,及其复杂,通过经理(中介者)来进行通信则会大大提供效率。

 


实现思路:

  多个对象持有中介者的引用,中介者中持有多个对象的引用(Map容器),达到中介效果。

例子:

  研发部门与财务部门通过经理进行交互。

部门接口:

public interface Department {
    void selfAction();//做内部的工作
    void outAction();//与外部交互的工作
}

中介者接口:

public interface Mediator {
    void register(String dname,Department department);//注册一个部门
    void command(String dname);//下发命令
}

研发部门:

public class Development implements Department {
    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("研发部门:没钱吃饭了,需要资金支援!");
        m.command("finacial");
    }
}

财务部门:

public class Finacial implements Department {
    private Mediator m;

    public Finacial(Mediator m) {
        //拿到中介者的引用
        this.m = m;
        //注册登记。
        m.register("finacial",this);
    }

    @Override
    public void selfAction() {
        //财务部工作
        System.out.println("这是是财务部:给您协调资金!");
    }

    @Override
    public void outAction() {
        //与中介者进行交互
    }
}

经理:

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


    @Override
    public void register(String dname, Department department) {
        //注册交互对象
        map.put(dname,department);
    }

    @Override
    public void command(String dname) {
        //执行交互
        System.out.println("这里是经理:为您进行协调中...");
        map.get(dname).selfAction();
    }
}

测试:

public static void main(String[] args) {
        //创建一个中介者
        Mediator mediator = new President();

        //两个部门持有同一个中介者
        Development development = new Development(mediator);
        Finacial finacial = new Finacial(mediator);

        //研发部门执行内部工作
        development.selfAction();
        //研发部门进行外部交互:
        development.outAction();//请求资金
    }

测试结果:

 

标签:研发部门,Mediator,dname,void,模式,中介,public
From: https://www.cnblogs.com/lurenjia-bky/p/16927224.html

相关文章

  • 迭代器模式(Iterator)
    用来遍历集合的工具。实现方式:使用一个游标记录当前读取位置。容器中使用迭代器:   一般迭代器都有的方法,整个接口:publicinterfaceMyInterator{......
  • D108设计模式_2抽象工厂模式20221120
    抽象工厂模式(AbstractFactoryPattern):属于创建型模式,它提供了一种创建对象的最佳方式,以一个超级工厂创建其他工厂。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不......
  • D107设计模式_1构建模式20221119
     一、构建模式构建模式属于对象的创建模式,可以把对象的内部属性和构建方法分离开来,可以构建自己需要的属性。当有些对象比较复杂的时候,需要的属性比较灵活的就需要用到......
  • 责任链模式(chain of responsibility)
    一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。定义:为了避免请求发送者与多个请求处理者耦合在一起(使用if 选择语句处理请求),将所有请求的处理者通......
  • (十三)抽象工厂模式
    1概述抽象工厂模式(AbstractFactory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。AbstractProductA和AbstractProductB是两个抽象产品,而Pro......
  • C++ 设计模式 目录
    设计模式推荐阅读ohmyfish.net​未来更新会先在​​ohmyfish.net​​更新,等到一定规模会发到平台上,如果有修改和补充也会在​​ohmyfish​​上进行。目标理解松耦合设计思......
  • 浅谈 CRTP:奇异递归模板模式
    浅谈CRTP:奇异递归模板模式前言建议先看一遍文末的参考资料!建议先看一遍文末的参考资料!建议先看一遍文末的参考资料!思维导图一、CRTP是什么CRTP全称:​​CuriouslyRec......
  • Ubuntu命令模式基础学习!!!
    查看当前文件夹的目录ls(list的缩写)命令用于列出文件和目录。默认上,他会列出当前目录的内容。带上参数后,可以以不同的方式显示ll会列出该文件下的所有文件信息,包括隐......
  • ACM 模式下的Java
    一、引入包相关importjava.util.*;二、基本输入相关涉及到输入需要提前创建一个键盘接收器Scannercin=newScaner(System.in);1、输入一个基本数据结构按照by......
  • 享元模式(FlyWeight )
    共享对象!目的:减少创建对象的数量,以减少内存占用和提高性能。核心奥义:通过享元类工厂来控制类的生成,相同的对象被放在Map中。享元对象的结构:内部状态:可以......