23.Mediator-中介者模式

Mediator 中介者模式

  • 中介模式:
    用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,
    而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。

  • 结构图:
    Mediator_structure

  • 示例类图:
    Mediator_uml

  • 示例代码:

public interface Mediator {
    public abstract void work(Colleague colleague);
}

public class ConcreteMediator implements Mediator {
    private CDDriver cdDriver;
    private SoundCard soundCard;

    @Override
    public void work(Colleague colleague) {
        if (cdDriver == colleague) {
            cdDriver.readSound();
        } else if (soundCard == colleague) {
            soundCard.playSound();
        }
    }

    public void setCdDriver(CDDriver cdDriver) {
        this.cdDriver = cdDriver;
    }
    public void setSoundCard(SoundCard soundCard) {
        this.soundCard = soundCard;
    }
}

// Colleague 同事类
public abstract class Colleague {
    protected Mediator mediator;

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

    public abstract void work();
}

// ConcreteMediator
public class CDDriver extends Colleague {

    public CDDriver(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void work() {
        mediator.work(this);
    }

    public void readSound() {
        System.out.println("CDDriver readSound.");
    }
}
public class SoundCard extends Colleague {

    public SoundCard(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void work() {
        mediator.work(this);
    }

    public void playSound() {
        System.out.println("SoundCard playSound.");
    }
}

// 测试
public class MediatorTest {

    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();

        CDDriver cdDriver = new CDDriver(mediator);
        SoundCard soundCard = new SoundCard(mediator);

        mediator.setCdDriver(cdDriver);
        mediator.setSoundCard(soundCard);

        cdDriver.work();
        soundCard.work();
    }
}
  • 角色:

    1. Mediator :中介者接口/抽象类。
      在里面定义了各个同事之间相互交互所需要的方法,
      可以是公共的方法,如Change方法,也可以是小范围的交互方法。

    2. ConcreteMediator :具体的中介者实现对象。
      它需要了解并为维护每个同事对象,并负责具体的协调各个同事对象的交互关系。

    3. Colleague :同事类的定义,通常实现成为抽象类。
      主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能,比如,每个具体同事类都应该知道中介者对象,
      也就是每个同事对象都会持有中介者对象的引用,这个功能可定义在这个类中。

    4. ConcreteColleague :具体的同事类,实现自己的业务。
      需要与其他同事对象交互时,就通知中介对象,中介对象会负责后续的交互。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值