java设计模式之调停者模式

①UML设计


②定义:调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用,从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。

③示例:

/**
 * 抽象调停者角色
 */
interface Mediator {

    //让调停者去负责同事类的交互
    void change(Colleague c);

}
/**
 * 具体调停者
 */
public class MainBoard implements Mediator {

    private CDDriver  cdDriver;
    private CPU       cpu;
    private VideoCard videoCard;
    private SoundCard soundCard;

    /**
     * Setter method for property <tt>cdDriver</tt>.
     *
     * @param cdDriver value to be assigned to property cdDriver
     */
    public void setCdDriver(CDDriver cdDriver) {
        this.cdDriver = cdDriver;
    }

    /**
     * Setter method for property <tt>cpu</tt>.
     *
     * @param cpu value to be assigned to property cpu
     */
    public void setCpu(CPU cpu) {
        this.cpu = cpu;
    }

    /**
     * Setter method for property <tt>videoCard</tt>.
     *
     * @param videoCard value to be assigned to property videoCard
     */
    public void setVideoCard(VideoCard videoCard) {
        this.videoCard = videoCard;
    }

    /**
     * Setter method for property <tt>soundCard</tt>.
     *
     * @param soundCard value to be assigned to property soundCard
     */
    public void setSoundCard(SoundCard soundCard) {
        this.soundCard = soundCard;
    }

    @Override
    public void change(Colleague c) {
        if (c instanceof CDDriver) {
            cpu.showInfo();
        } else if (c instanceof CPU) {
            soundCard.showInfo();
        } else if (c instanceof SoundCard) {
            videoCard.showInfo();
            System.out.println("Load completion, please enjoy");
        }
    }
}
/**
 * 抽象同事类角色:
 */
public abstract class Colleague {

    //持有一个调停者对象
    private Mediator mediator;

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

    public Mediator getMediator() {
        return mediator;
    }
}

/**
 * 具体同事类
 */
public class CDDriver extends Colleague {

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

    public void showInfo() {
        System.out.println("CDDriver starts to run");
        getMediator().change(this);
    }

}

public class CPU extends Colleague {

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

    public void showInfo() {
        System.out.println("CPU starts to run");
        getMediator().change(this);
    }
}

public class SoundCard extends Colleague {

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

    public void showInfo() {
        System.out.println("SoundCard starts to run");
        getMediator().change(this);
    }

}

public class VideoCard extends Colleague {

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

    public void showInfo() {
        System.out.println("VideoCard starts to run");
        getMediator().change(this);
    }
}
public class Client{
    public static void main(String[] args) {
        MainBoard mediator = new MainBoard();
        CDDriver cdDriver = new CDDriver(mediator);
        CPU cpu = new CPU(mediator);
        SoundCard soundCard = new SoundCard(mediator);
        VideoCard videoCard = new VideoCard(mediator);
        mediator.setCpu(cpu);
        mediator.setSoundCard(soundCard);
        mediator.setVideoCard(videoCard);
        cdDriver.showInfo();
    }
}
执行结果:
CDDriver starts to run
CPU starts to run
SoundCard starts to run
VideoCard starts to run
Load completion, please enjoy



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值