zoukankan      html  css  js  c++  java
  • 设计模式-中介者模式

    在现实中,你要和天南海北的朋友聊天需要中介,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();
    
        }
    }

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

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

    不和别人一样,不复制只真正理解
  • 相关阅读:
    Shell 批量搜索关键词并保存结果到文件中(数组、循环)
    解决tensorflow的Session Exception问题
    解决h5py的FutureWarning问题
    【转】Ubuntu16.04安装WPS
    [Linux] 随机切分文件内容
    [Python] 动态函数调用(通过函数名)
    [Python] dict字典的浅复制与深复制
    基于sklearn进行文本向量化
    Asp.Net MVC SingleServiceResolver类剖析
    Asp.Net MVC 高级特性(附带源码剖析)
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12794844.html
Copyright © 2011-2022 走看看