23.Mediator-中介者模式

来源:互联网 发布:无损音乐下载网站知乎 编辑:程序博客网 时间:2024/05/21 10:10

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();}// ConcreteMediatorpublic 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 :具体的同事类,实现自己的业务。
      需要与其他同事对象交互时,就通知中介对象,中介对象会负责后续的交互。

0 0
原创粉丝点击