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

    以上
    希望对大家有所帮助

  • 相关阅读:
    第一次设计作业
    项目选题报告(团队)
    第二次结队作业
    团队第一次作业
    原型设计(结对第一次)
    第二次作业——个人项目实战
    对于软件工程专业的思考
    电场与磁场
    透明层上的层或数字不透明
    Visiual Studio2012 CLR20r3问题
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/14347064.html
Copyright © 2020-2023  润新知