博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式梳理——中介者模式
阅读量:4095 次
发布时间:2019-05-25

本文共 2451 字,大约阅读时间需要 8 分钟。

一、概述

       中介者模式(Mediator),用一个中介对象来封装一系列的对象交互 。中介者使个对象不需要显示的互相引用,使其耦合松散,而且可以独立的改变他们之间的交互。

二、UML图示

三、代码实现

1、抽象中介者

public abstract class Mediator {    public abstract void send(String message,Colleague colleague);}

2、抽象同事类

public abstract class Colleague {    protected Mediator mediator;    public Colleague(Mediator mediator) {        this.mediator = mediator;    }}

3、具体同事类

public class ConcreteColleagueA extends Colleague {    public ConcreteColleagueA(Mediator mediator) {        super(mediator);    }    public void send(String message){        mediator.send(message,this);    }    public void notifyMessage(String message){        System.out.println("同事A收到信息:"+message);    }}public class ConcreteColleagueB extends Colleague {    public ConcreteColleagueB(Mediator mediator) {        super(mediator);    }    public void send(String message){        mediator.send(message,this);    }    public void notifyMessage(String message){        System.out.println("同事B收到的信息:"+message);    }}

4、具体中介者

public class ConcreteMediator extends Mediator {    private ConcreteColleagueA concreteColleagueA;    private ConcreteColleagueB concreteColleagueB;    @Override    public void send(String message, Colleague colleague) {        if(colleague == concreteColleagueA){            concreteColleagueB.notifyMessage(message);        }else {            concreteColleagueA.notifyMessage(message);        }    }    public ConcreteColleagueA getConcreteColleagueA() {        return concreteColleagueA;    }    public void setConcreteColleagueA(ConcreteColleagueA concreteColleagueA) {        this.concreteColleagueA = concreteColleagueA;    }    public ConcreteColleagueB getConcreteColleagueB() {        return concreteColleagueB;    }    public void setConcreteColleagueB(ConcreteColleagueB concreteColleagueB) {        this.concreteColleagueB = concreteColleagueB;    }}

5、测试类

public class Test {    public static void main(String[] args) {        ConcreteMediator concreteMediator = new ConcreteMediator();        ConcreteColleagueA concreteColleagueA = new ConcreteColleagueA(concreteMediator);        ConcreteColleagueB concreteColleagueB = new ConcreteColleagueB(concreteMediator);        concreteMediator.setConcreteColleagueA(concreteColleagueA);        concreteMediator.setConcreteColleagueB(concreteColleagueB);        concreteColleagueA.send("吃饭了吗?");        concreteColleagueB.send("没有呢,你要请客吗?");    }}输出:同事B收到的信息:吃饭了吗?同事A收到信息:没有呢,你要请客吗?

注:参考文献《大话设计模式》程杰著。

你可能感兴趣的文章
字符编码:ASCII,Unicode 和 UTF-8
查看>>
c++ 发邮件(含附件)
查看>>
Window设置Wifi热点的脚本
查看>>
telnet实现简单的邮件发送
查看>>
dos编程详解
查看>>
程序员的职业规划
查看>>
c++ 实现python的split,strip函数
查看>>
c++使用Eigen库计算矩阵特征值
查看>>
VS调试时查看动态数组的全部元素
查看>>
ls -l 每一列的含义
查看>>
安装广告拦截插件abp
查看>>
python处理打卡数据的excel表格
查看>>
Linux虚拟机与本地机共享文件夹
查看>>
[JS] 格式化时间长度(formatDuration)
查看>>
[JS] 变量提升
查看>>
[JS] 检查一个对象是否可迭代
查看>>
Java访问类中的私有成员(private member)
查看>>
输出一个集合所有子集的元素和(Print sums of all subsets of a given set)
查看>>
Java中的迭代器(Iterators in Java)
查看>>
Ubuntu 16.04中安装Vim 8.0
查看>>