中介者设计模式例子

原文地址:http://www.cnblogs.com/jyyzzjl/p/5187376.html

一、概述
用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。

二、特点
1、有多个系统或者对象发生交互,但又不能直接进行交互;
2、通过一个中介者来保留所有的交互对象(又叫同事类)的引用;
3、同事类同事也需要保留中介者的引用,以便调用中介者中的方法与其他同事类发生交互
4、中介者根据实际情况,如果系统复杂,有多个中介者,那么可以编写抽象中介者,如果没有则直接编写具体中介者

三、UML类图
这里写图片描述

例子:

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

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

public class ConcreteColleague1 extends Colleague {

    public ConcreteColleague1(Mediator mediator) {
        super(mediator);
    }
    public void send(String message){
        mediator.send(message, this);
    }
    public void notify(String message){
        System.out.println("同事1得到的消息为:"+message);
    }

}


public class ConcreteColleague2 extends Colleague {

    public ConcreteColleague2(Mediator mediator) {
        super(mediator);
    }
    public void send(String message){
        mediator.send(message, this);
    }
    public void notify(String message){
        System.out.println("同事2得到的消息为:"+message);
    }

}


public class ConcreteMediator extends Mediator {
    private ConcreteColleague1 colleague1;
    private ConcreteColleague2 colleague2;


    public void setColleague1(ConcreteColleague1 colleague){
        this.colleague1=colleague;
    }
    public void setColleague2(ConcreteColleague2 colleague){
        this.colleague2=colleague;
    }

    @Override
    public void send(String msg, Colleague colleague) {
        if(colleague==colleague1){
            colleague2.notify(msg);
        }else {
            colleague1.notify(msg);
        }
    }

}

public class Client {
    public static void main(String[] args) {
        ConcreteMediator mediator=new ConcreteMediator();
        ConcreteColleague1 colleague1=new ConcreteColleague1(mediator);
        ConcreteColleague2 colleague2=new ConcreteColleague2(mediator);

        mediator.setColleague1(colleague1);
        mediator.setColleague2(colleague2);

        colleague1.send("吃饭了吗?");
        colleague2.send("吃过了");
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值