设计模式(二十三)中介者模式

栏目: 后端 · 发布时间: 6年前

内容简介:先看图:有很多孤立的人这里是3个,如果有100个,是不是图很复杂,那在程序中表示出来就很难。明显用右图很明了。中介者模式就是简化这种关系的模式,有两个角色:关系成员、中介者。我一般喜欢从语法上分析:

先看图:

设计模式(二十三)中介者模式

有很多孤立的人这里是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:只要不放弃,就没有什么能让自己退缩;只要够坚强,就没有什么能把自己打垮!


以上所述就是小编给大家介绍的《设计模式(二十三)中介者模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员代码面试指南:IT名企算法与数据结构题目最优解

程序员代码面试指南:IT名企算法与数据结构题目最优解

左程云 / 电子工业出版社 / 2015-9 / 79.00元

这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮助广大程序员的面试准备做到万无一失。“刷”完本书后,你就是“题王”!__eol__本书采用题目+解答的方式组织内容,并把面试题类型相近或者解法相近的题目尽量放在一起,读者在学习本书时很容易看出面试题解法之间的联......一起来看看 《程序员代码面试指南:IT名企算法与数据结构题目最优解》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具