【每日一记】设计模式——中介者模式

23 篇文章 0 订阅
23 篇文章 0 订阅

概述

  • 定义:定义一个中介对象来封装系列对象之间的交互。
  • 适用场景:
    1. 一组定义良好的对象,现在要进行复杂的通信
    2. 定制一个分布在多个类中的行为,而又不想生成太多的子类

实现

// 同事类
public abstract class AbstractColleague {
    protected String msg;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public abstract void sendMsg(String msg, AbstractMediator mediator);
}

class ColleagueA extends AbstractColleague {

    @Override
    public void sendMsg(String msg, AbstractMediator mediator) {
        this.msg = msg;
        mediator.AaffectB();
    }

}

class ColleagueB extends AbstractColleague {

    @Override
    public void sendMsg(String msg, AbstractMediator mediator) {
        this.msg = msg;
        mediator.BaffectA();
    }

}
// 中介者
public abstract class AbstractMediator {
    protected ColleagueA a;
    protected ColleagueB b;

    public AbstractMediator(ColleagueA a, ColleagueB b) {
        super();
        this.a = a;
        this.b = b;
    }

    public abstract void AaffectB();

    public abstract void BaffectA();
}

class Mediator extends AbstractMediator {

    public Mediator(ColleagueA a, ColleagueB b) {
        super(a, b);
    }

    @Override
    public void AaffectB() {
        String msg = a.getMsg();
        b.setMsg("receive from A: " + msg);
    }

    @Override
    public void BaffectA() {
        String msg = b.getMsg();
        a.setMsg("receive from B: " + msg);
    }

}
// 客户端
public class Client {
    public static void main(String[] args) throws Exception {
        ColleagueA a = new ColleagueA();
        ColleagueB b = new ColleagueB();
        AbstractMediator m = new Mediator(a, b);
        a.sendMsg("hello", m);
        System.out.println("a: " + a.getMsg());
        System.out.println("b: " + b.getMsg());
        b.sendMsg("world", m);
        System.out.println("a: " + a.getMsg());
        System.out.println("b: " + b.getMsg());
    }
}

使用中介者模式可以避免同事类之间的过度耦合,也可以将对象间一对多的关联转变为一对一的关联,使对象间的关系易于理解和维护

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值