中介者模式(Mediator)_java实现

//20210129
写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现命令模式

中介者模式核心思想

  • 设置一个中介者,来通信所有相关的类
  • 举例:MVC模型,Controller(C)是Model(M)和View(V)的中介,负责通信二者,解读消息

程序源代码:

  • 这里为了方便理解,实现了一个美国、伊拉克通过中介(联合国安理会)沟通的场景

/**
 * 抽象国家类
 */
public abstract class Country {

    protected UnitedNations unitedNations;//每个国家都要声明中介者

    public Country(UnitedNations unitedNations){
        this.unitedNations = unitedNations;
    }

}

/**
 * 抽象中介----联合国,有调和各国关系的功能
 */
public abstract class UnitedNations {

    public abstract void declare(String message,Country country);
}


/**
 * 美国实现类
 */
public class USA extends Country{
    public USA(UnitedNations unitedNations){
        super(unitedNations);
    }

    public void declare(String message){
        unitedNations.declare(message,this);
    }

    public void acquireMessage(String message){
        System.out.println("美国获得对方信息:" + message);
    }
}


/**
 * 伊拉克实现类
 */
public class Iraq extends Country{
    public Iraq(UnitedNations unitedNations){
        super(unitedNations);
    }

    public void declare(String message){
        unitedNations.declare(message,this);
    }

    public void acquireMessage(String message){
        System.out.println("伊拉克获得对方信息:" + message);
    }
}


/**
 * 联合国安理会实现类
 */
public class UnitedNationsSecurityCouncil extends UnitedNations{
    private USA usa;
    private Iraq iraq;

    public void setUsa(USA usa) {
        this.usa = usa;
    }

    public void setIraq(Iraq iraq) {
        this.iraq = iraq;
    }

    @Override
    public void declare(String message, Country country) {
        if(country == usa) {
            iraq.acquireMessage(message);
        } else {
            usa.acquireMessage(message);
        }
    }
}


/**
 * 测试主类
 */
public class Main {
    public static void main(String[] args) {
        UnitedNationsSecurityCouncil UNSC = new UnitedNationsSecurityCouncil();

        USA usa = new USA(UNSC);
        Iraq iraq = new Iraq(UNSC);

        UNSC.setUsa(usa);
        UNSC.setIraq(iraq);

        usa.declare("不准研制核武器");
        iraq.declare("我们没有核武器");
    }
}

  • 输出如下

以上
希望对大家有所帮助

posted @ 2021-01-29 21:09  醉生梦死_0423  阅读(125)  评论(0)    收藏  举报