栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式:22-调停者模式(中介者模式)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式:22-调停者模式(中介者模式)

一、适用场景:中介者模式提供了一个中介类来处理不同类之间的通信,降低各个类的相互耦合。比如同事之间的沟通,并不直接找对方,而是把消息发给项目管理者,由管理者去发送消息。
二、示例
1.创建抽象调停者类

package cn.edu.tju.app;

public abstract  class Mediator {
    public abstract void sendMessage(Colleague colleague,String name,String content);
    public abstract void addColleague(Colleague colleague);
}

2.创建具体的调停者类,用一个map来保存所有同事

package cn.edu.tju.app;

import java.util.HashMap;
import java.util.Map;

public class ConcreteMediator extends Mediator{
    private Map colleagueMap=new HashMap<>();
    @Override
    public void addColleague(Colleague colleague){
        colleagueMap.put(colleague.getName(),colleague);
    }

    @Override
    public void sendMessage(Colleague colleague, String name, String content) {
        Colleague destination=colleagueMap.get(name);
        if(destination!=null){
            System.out.println("【调停者转发】"+content+"[from "+colleague.getName()+" to "+name+"]");
            destination.receiveMessage(colleague.getName(),content);
        }

    }


}

3.创建抽象同事类,每个同事需要一个调停者属性

package cn.edu.tju.app;

public abstract class Colleague {
    private String name;
    protected Mediator mediator = null;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setMediator(Mediator mediator) {
        this.mediator = mediator;
    }

    public abstract void receiveMessage(String source,String content);

    public abstract void sendMessage(String destination,String content);
}


4.创建具体同事类

package cn.edu.tju.app;

public class ConcreteColleague extends Colleague {
    @Override
    public void receiveMessage(String source,String content) {
        System.out.println("【"+this.getName()+" 收到】 "+content+" [from "+source+"]");
    }

    @Override
    public void sendMessage(String destination,String content) {
        System.out.println("【"+this.getName()+"给调停者发送】 "+content+" [to "+destination+"]");
        mediator.sendMessage(this,destination,content);
    }
}

5.创建主类,进行测试:

package cn.edu.tju.app;

public class ColleagueTest {
    public static void main(String[] args) {
        Mediator mediator=new ConcreteMediator();
        Colleague colleague1=new ConcreteColleague();
        colleague1.setName("张三");
        Colleague colleague2=new ConcreteColleague();
        colleague2.setName("李四");

        colleague1.setMediator(mediator);
        colleague2.setMediator(mediator);

        mediator.addColleague(colleague1);
        mediator.addColleague(colleague2);

        colleague1.sendMessage("李四","我需要一份帮助文档");
        colleague2.sendMessage("张三","在服务器/root目录");


    }
}

6.运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/713734.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号