• 设计模式-中介者模式


    在现实中,你要和天南海北的朋友聊天需要中介,QQ,微信,信息等等这些都是中介工具。中介工具的作用就是把同一类的人放在一起(群),一个发送消息的时候,需要通知其他人

    java中的中介者模式有四个角色:抽象中介者,具体抽象者,抽象角色,具体角色。

    抽象中介者(群的概念)

    abstract class Mediator {
        public abstract void register(Colleague colleague);
        public abstract void realy(Colleague colleague);
    }

    具体中介者(具体的群)

    public class ConcreteMediator extends Mediator {
        private ArrayList<Colleague> colleagues=new ArrayList<>();
    
    
        @Override
        public void register(Colleague colleague) {
          if(colleagues.contains(colleague)){
              colleagues.add(colleague);
              colleague.setMediator(this);
          }
        }
    
        @Override
        public void realy(Colleague colleague) {
            for (Colleague colleague1 : colleagues) {
                if(!colleague1.equals(colleague))
                    colleague1.receive();
            }
        }
    }

    抽象角色

    abstract class Colleague {
        protected Mediator mediator;
    
        public void setMediator(Mediator mediator) {
            this.mediator = mediator;
        }
        public abstract void receive();
        public abstract void send();
    
    }

    具体角色1

    public class ConcreteColleague1 extends Colleague {
        @Override
        public void receive() {
            System.out.println("同事一收到请求");
    
        }
    
        @Override
        public void send() {
            System.out.println("同事一发送请求");
            mediator.realy(this);
        }
    }

    具体角色2

    public class ConcreteColleague2 extends Colleague {
        @Override
        public void receive() {
            System.out.println("同事2收到请求");
        }
    
        @Override
        public void send() {
            System.out.println("同事2发送请求");
            mediator.realy(this);
        }
    }

    测试类

    public class Client {
        public static void main(String[] args) {
            ConcreteMediator md = new ConcreteMediator();
            ConcreteColleague1 c1 = new ConcreteColleague1();
            ConcreteColleague2 c2 = new ConcreteColleague2();
            md.register(c1);
            md.register(c2);
            c1.send();
    
        }
    }

    可以看到上述代码,将每个具体角色与中介者绑定,每个具体角色都有发送和接收两个功能,当某一个角色发出请求时,中介者需要通知所有除了这个角色以外的符合条件的具体角色做出响应。

    应用场景:多个对象之间存在复杂的依赖关系,难以复用时可以选择此设计模式,每个角色只负责自己的事宜,该对谁的请求做出响应完全是中介者该做的事。

    不和别人一样,不复制只真正理解
  • 相关阅读:
    Qt-网易云音乐界面实现-4 实现推荐列表和我的音乐列表,重要在QListWidget美化
    Qt-网易云音乐界面实现-3 音乐名片模块的实现
    Qt-网易云音乐界面实现-2 红红的程序运行图标,和相似下方音乐条
    Qt-网易云音乐界面实现-1 窗口隐藏拖拽移动,自定义标题栏
    Qt 利用XML文档,写一个程序集合 四
    promise的简单理解
    toast弹框组件的封装-插件方式
    vuex自动获取当前的时间
    用vue对tabbar的封装
    子组件与父组件的各种传递关系
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12794844.html
Copyright © 2020-2023  润新知