6月更文挑战|设计模式 —— 中介者模式

这是我参与更文挑战的第17天,活动详情查看:更文挑战

中介者模式

中介者模式也可以叫做调解者模式或是调停者模式。

中介者定义:中介者模式包装一系列对象互相作用的方式,使得对象之间不会有明显的必要相互作用,从而达到松散耦合。当对象之间作用发生改变时,不会立即影响其他对象之间的作用。中介者模式将原先多对多的相互作用转化为一对多的相互作用。

实战

中介者模式中中介者一直是作为协调多个对象之间交互的角色。以下代码中MainBoard作为中介者,将电脑中每个零件相互建立了关联关系,MainBoard持有所有零件对象,每个零件持有MainBoard对象。初始化后,当某个零件需要执行操作时,会调用Mediator的change方法,接着在MainBoard当中会去判断是哪个零件发生调用关系,则执行对应方法。这样就将对应零件需要执行的功能由Mediator代劳,将零件和零件之间的关系解耦。

//抽象中介者
public abstract class Mediator {
    public abstract void change(Colleague c);
}

//具体中介者
public class MainBoard extends Mediator {
    private CPU cpu;
    private SoundCard soundCard;
    private GraphicsCard graphicsCard;
    
    @override
    public void change(Colleague c) {
        if(c == cpu){
            handleCPU((CPU)c);
        }else if(c == graphicsCard){
            handleGraphicsCard((GraphicsCard)c);
        }
    }
    
    private void handleCPU(CPU cpu){
        soundCard.soundPlay(cou.getDataSound());
        graphicsCard.videoPlay(cou.getDataVideo());
    }
    private void handleGraphicsCard(GraphicsCard graphicsCard){
        cpu.getInfo(graphicsCard.getDataInfo());
    }
    public void setCPU(CPU cpu){
        this.cpu = cpu;
    }
    public void setSoundCard(SoundCard SoundCard){
        this.soundCard = soundCard;
    }
    public void setGraphicsCard(GraphicsCard graphicsCard){
        this.graphicsCard = graphicsCard;
    }
}

//抽象同事类
abstract class Colleague {
    protected Mediator mediator;
    public Colleague(Mediator mediator){
        this.mediator = mediator;
    }
}

//具体同事类
class CPU extends Colleague {
    public CPU(Mediator mediator) {
       super(mediator)
    }
    public void getInfo();
    public void getDataSound();
    public void videoPlay();
    
    public void load(){
     mediator.load(this);
    }
}

class SoundCard extends Colleague {
    public SoundCard(Mediator mediator) {
       super(mediator)
    }
    public void soundPlay();
}

class GraphicsCard extends Colleague {
    public GraphicsCard(Mediator mediator) {
       super(mediator)
    }
    public void videoPlay();
}

// 执行
MainBoard mainBoard = new MainBoard();

CPU cpu = new CPU();
SoundCard soundCard = new SoundCard();
GraphicsCard graphicsCard = new GraphicsCard();

mainBoard.setCPU(cpu);
mainBoard.setSoundCard(soundCard);
mainBoard.setGraphicsCard(graphicsCard);


复制代码

总结

在编程开发中一个类必然会和其他类产生依赖关系。如果这种关系过于复杂难以剥离时,必然会影响后期开发扩展和代码逻辑。适当使用中介者模式可以对这种依赖关系解耦使代码逻辑结构清晰明了。

参考

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享