跳至主要內容

设计模式-行为型-中介模式

引领潮流大约 1 分钟设计模式archive

1、定义

中介者模式:用一个中介对象来封装一系列对象交互

写法

/**
 * 中介
 */
public interface Mediaor {

    void change(Colleague colleague);

}

public abstract class Colleague {

    protected Mediaor mediaor;

    public Colleague(Mediaor mediaor) {
        this.mediaor = mediaor;
    }

    public abstract void action();
}

/**
 * Cd设备
 */
public class CDDevice extends Colleague {
    private String cd;

    public CDDevice(Mediaor mediaor) {
        super( mediaor );
    }

    @Override
    public void action() {
        mediaor.change( this );
    }

    public void setCd(String cd) {
        this.cd = cd;
    }

    public void loadCD(){
        System.out.println( "load CD" + cd );
    }

}

/**
 * CPU
 */
public class CPU extends Colleague {

    private String branch;

    public CPU(Mediaor mediaor) {
        super( mediaor );
    }

    @Override
    public void action() {
        mediaor.change( this );
    }

    public void setBranch(String branch) {
        this.branch = branch;
    }

    public void loadCPU(){
        System.out.println( "CPU" + branch );
    }

}

/**
 * 声卡
 */
public class SoundCard extends Colleague {

    private String sound;

    public SoundCard(Mediaor mediaor) {
        super( mediaor );
    }

    @Override
    public void action() {
        mediaor.change( this );
    }

    public void setSound(String sound) {
        this.sound = sound;
    }

    public void loadSoundCard(){
        System.out.println( "load sound" + sound );
    }

}

/**
 * 中介者模式
 * 多对多转化为一对多
 */
public class MainBoard implements Mediaor {

    private CDDevice cdDevice; //光驱设备
    private CPU cpu; //CPU
    private SoundCard soundCard; //声卡设备

    public void setCdDevice(CDDevice cdDevice) {
        this.cdDevice = cdDevice;
    }

    public void setCpu(CPU cpu) {
        this.cpu = cpu;
    }

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

    @Override
    public void change(Colleague colleague) {
        if (colleague instanceof CDDevice) {
            ((CDDevice) colleague).loadCD();
        } else if (colleague instanceof CPU) {
            ((CPU) colleague).loadCPU();
        } else if (colleague instanceof SoundCard) {
            ((SoundCard) colleague).loadSoundCard();
        }
    }

}

/**
 * 从多对多网状关系
 * 变成一对多
 *
 */
public class TestMain {

    public static void main(String[] args){

        MainBoard mediator = new MainBoard();

        CPU cpu = new CPU( mediator );
        CDDevice cdDevice = new CDDevice( mediator );
        SoundCard soundCard = new SoundCard( mediator );

        mediator.setCdDevice( cdDevice );
        mediator.setCpu( cpu );
        mediator.setSoundCard( soundCard );

        cdDevice.action();

    }

}

代码示例

https://github.com/yinlingchaoliu/23-design-pattern