博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(二十三)中介者模式
阅读量:7068 次
发布时间:2019-06-28

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

先看图:

有很多孤立的人这里是3个,如果有100个,是不是图很复杂,那在程序中表示出来就很难。明显用右图很明了。

中介者模式就是简化这种关系的模式,有两个角色:关系成员、中介者。我一般喜欢从语法上分析:

中介者:包含每一个关系成员,要处理所有的关系,就要包含是所有的成员。只有一个方法

abstract class Mediator {    abstract void call(String string, Person person);}复制代码

具体中介者:call是处理关系的,主要的方法。

public class AllMediator extends Mediator {    Aperson aperson;    Bperson bperson;    Cperson cperson;        public Aperson getAperson() {        return aperson;    }    public void setAperson(Aperson aperson) {        this.aperson = aperson;    }    public Bperson getBperson() {        return bperson;    }    public void setBperson(Bperson bperson) {        this.bperson = bperson;    }    public Cperson getCperson() {        return cperson;    }    public void setCperson(Cperson cperson) {        this.cperson = cperson;    }    @Override    void call(String string, Person person) {        if (person == aperson) {            aperson.re(string);        } else if (person == bperson) {            bperson.re(string);        } else if (person == cperson) {            cperson.re(string);        }    }}复制代码

成员,不必包含与他有关系的成员,他只需包含一个中介者,通过中介发消息,是委托给中介。他有一个发消息的方法,中介通过判定成员来确定恢复消息。

abstract class Person {    String name;    Mediator mediator;    Person(String name, Mediator mediator) {        this.mediator = mediator;        this.name = name;    }    abstract void call(String mess);    abstract void re(String mess);    }复制代码

A:

public class Aperson extends Person {    Aperson(String name, Mediator mediator) {        super(name, mediator);    }    @Override    void call(String mess) {        mediator.call(mess, this);    }    @Override    void re(String mess) {        System.out.println(name + ":" + mess);    }}复制代码

B:

public class Bperson extends Person {    Bperson(String name, Mediator mediator) {        super(name, mediator);    }    @Override    void call(String mess) {        mediator.call(mess, this);    }    @Override    void re(String mess) {        System.out.println(name + ":" + mess);    }}复制代码

C:

public class Cperson extends Person {    Cperson(String name, Mediator mediator) {        super(name, mediator);    }    @Override    void call(String mess) {        mediator.call(mess, this);    }    @Override    void re(String mess) {        System.out.println(name + ":" + mess);    }}复制代码

测试

class Test {    public static void main(String[] args) {        AllMediator mediator = new AllMediator();        Aperson aperson = new Aperson("A同学", mediator);        Bperson bperson = new Bperson("B同学", mediator);        Cperson cperson = new Cperson("C同学", mediator);        mediator.setAperson(aperson);        mediator.setBperson(bperson);        mediator.setCperson(cperson);        aperson.call("告诉B,我明天不去了");        bperson.call("告诉C,我明天不去了");    }}复制代码

结果:

A同学:告诉B,我明天不去了

B同学:告诉C,我明天不去了

note:只要不放弃,就没有什么能让自己退缩;只要够坚强,就没有什么能把自己打垮!

转载于:https://juejin.im/post/5ce3fe02518825314b6d6084

你可能感兴趣的文章
LeetCode之二叉树问题
查看>>
Vue.js 源码学习笔记
查看>>
社会化分享如何影响你的APP
查看>>
FALCON: An Optimizations Java JIT
查看>>
探索String 、StringBuilder 、StringBuffer 的奥妙
查看>>
centos下PIL的安装
查看>>
IOST节点计划全面升级: 全球寻找1000位IOST合伙人
查看>>
NSNotificationCenter
查看>>
版本号正则表达式匹配
查看>>
新手入门mysql(一)
查看>>
nodejs实现微信小程序支付功能及相关问题总结
查看>>
Django web框架-win10搭建django2.1.7开发环境,定义简易视图及网址
查看>>
HTTP各种常见状态码
查看>>
DH 密钥交换
查看>>
Git相关小记
查看>>
Python将字符串转为字典最佳实践
查看>>
Python3之字符串格式化format函数详解(下)
查看>>
Python笔记001-类的特殊方法
查看>>
10分钟快速精通rollup.js——Vue.js源码打包原理深度分析
查看>>
蜂鸟智游大数据:“人在囧途”的春运,航空公司们可操碎了心
查看>>