23.Mediator-中介者模式

Mediator 中介者模式

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

  • 结构图:
    Mediator_structuremarkdown

  • 示例类图:
    Mediator_umlide

  • 示例代码:测试

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();
    }
}
  • 角色:this

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

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

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

    4. ConcreteColleague :具体的同事类,实现本身的业务。
      须要与其余同事对象交互时,就通知中介对象,中介对象会负责后续的交互。接口

相关文章
相关标签/搜索