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

    一、定义

    封装了一组对象如何交互的对象

    补充定义:通过使对象明确地相互引用来促进松散耦合,并允许独立地改变它们的交互

    类型:行为型

    二、适用场景

    1、系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解

    2、交互的公共行为,如果需要改变行为则可以增加新的中介者类。

    (聊天室:其中一个人说一句话,会通知聊天室里的所有人。如果没有中介者,则要对所有人说一遍)

    三、中介者模式-优点

    1、将一对对转化为一对一,降低程序复杂度

    2、类之间解耦(在聊天室说话,假设有10个人,其中一个人要对剩余的9个人说,这样他们是耦合在一起的。如果只对聊天室说,这样就解耦了)

    四、中介者模式-缺点

    1、中介者过多,导致系统复杂

    五、中介者模式-相关设计模式

    1、中介者模式和观察者模式

    使用观察者模式,实现中介者模式中的角色间通讯。

    六、Coding

    场景:学习的时候,有一个学习群(如QQ群),大家交流都通过这个群来实现

    1、用户类

    public class User {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public User(String name) {
            this.name = name;
        }
    
        public  void sendMesssage(String message){
            StudyGroup.showMessage(this, message);
        }
    }
    

     

    2、学习群类

    public class StudyGroup {
    
        public static void showMessage(User user, String message){
            System.out.println(new Date().toString() + " [" + user.getName() + "] : " + message);
        }
    }
    

     

    3、测试

     

    public class Test {
        public static void main(String[] args) {
            User larry = new User("larry");
            User nick = new User("nick");
    
            larry.sendMesssage("Hello world");
            nick.sendMesssage("Yes");
        }
    }
    

      

    结果

    4、UML图

     七、源码中的使用

    1、JDK中的Java.util 下的计时器类Timer

    里面有很多schedule方法,最后调用sched方法

    Timer就相当一个中介者,TimerTask相当于一个用户。

    
    
  • 相关阅读:
    Codeforces 741D 【Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths】
    Codeforces 235C 【Cyclical Quest】
    UOJ #62.【UR #5】怎样跑得更快
    luoguP3648 [APIO2014]序列分割
    luoguP4782 [模板]2-SAT问题
    原博客已废弃
    个数可变的参数收藏
    新的一年开始。
    文件上传下载总结
    模板模式学习(转)
  • 原文地址:https://www.cnblogs.com/linlf03/p/10461011.html
Copyright © 2011-2022 走看看