设计模式-行为型-中介模式
大约 1 分钟
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