前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式-中介者

设计模式-中介者

作者头像
cwl_java
发布2019-10-26 20:53:02
3670
发布2019-10-26 20:53:02
举报
文章被收录于专栏:cwl_Java

中介者

中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。

1.优点
  • 降低了对象之间的耦合性,使得对象易于独立地被复用。
  • 将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。
2.缺点
  • 当同事类太多时,中介者的职责将很大,它会变得复杂而庞大,以至于系统难以维护。
3.代码示例
3.1 中介者接口
代码语言:javascript
复制
public interface Mediator {

    void register(Colleague colleague);
}
3.2 中介者实现类
代码语言:javascript
复制
public class ConcreteMediator implements Mediator {

    private List<Colleague> colleagues=new ArrayList<Colleague>();

    public void register(Colleague colleague) {
        if(!colleagues.contains(colleague)) {
            colleagues.add(colleague);
            colleague.setMedium(this);
        }
    }

    public void relay(Colleague cl) {
        for(Colleague ob:colleagues) {
            if(!ob.equals(cl)) {
                ((Colleague)ob).receive();
            }
        }
    }
}
3.3 抽象的同事类
代码语言:javascript
复制
public abstract class Colleague {

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

    public abstract void receive();
    public abstract void send();
}
3.4 具体同事类A
代码语言:javascript
复制
public class ConcreteColleagueA extends Colleague {

    public void receive() {
        System.out.println("具体同事类A收到请求。");
    }

    public void send() {
        System.out.println("具体同事类A发出请求。");
        mediator.register(this); //请中介者转发
    }
}
3.5 具体同时类B
代码语言:javascript
复制
public class ConcreteColleagueB extends Colleague {

    public void receive() {
        System.out.println("具体同事类B收到请求。");
    }

    public void send() {
        System.out.println("具体同事类B发出请求。");
        mediator.register(this); //请中介者转发
    }
}
3.6 测试用例
代码语言:javascript
复制
public class MediatorPattern {
    public static void main(String[] args) {
        Mediator md=new ConcreteMediator();
        Colleague c1,c2;
        c1=new ConcreteColleagueA();
        c2=new ConcreteColleagueB();
        md.register(c1);
        md.register(c2);
        c1.send();
        System.out.println("-------------");
        c2.send();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 中介者
    • 1.优点
      • 2.缺点
        • 3.代码示例
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档