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

设计模式:22-调停者模式(中介者模式),第1张

设计模式: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.运行结果:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5710383.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存