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();
    
        }
    }

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

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

    不和别人一样,不复制只真正理解
  • 相关阅读:
    Android编译环境配置(Ubuntu 14.04)
    Android中的接口回调技术
    我为什么要拒绝Ctrl+C和Ctrl+V?
    软件设计网站大全
    国内及Github优秀开发人员列表
    Linux常用指令
    Linux系统目录结构
    UML图
    Android软件设计---Dumpsys工具使用
    Android应用程序Monkey测试
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12794844.html
Copyright © 2011-2022 走看看