• 中介者模式(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("我们没有核武器");
        }
    }
    
    
    • 输出如下

    以上
    希望对大家有所帮助

  • 相关阅读:
    内置的包装类
    子类继承父类的哪些成员
    JAVA笔记140-使用this语句解决构造器重载相互调用问题
    Java学习
    AngularJs2
    Angular
    检测是否所有的栏位都已经填充了内容了。(可以用来判断动态放置的东西和外加的框是否一致)
    上下各有一个框,框里有元素(点击下面的元素,显示到上面的框里面去,按一定顺序排放)
    Nashorn 在JDK 8中融合Java与JavaScript之力
    2014年Facebook的开源成就
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/14347064.html
Copyright © 2020-2023  润新知