>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 26752 个阅读者 刷新本主题
 * 贴子主题:  Java设计模式:中介者模式 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2019-08-15 23:36:52     消息  查看  搜索  好友  邮件  复制  引用

  

中介者模式

     中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。            

介绍

         意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

         主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。

         何时使用:多个类相互耦合,形成了网状结构。

         如何解决:将上述网状结构分离为星型结构。

         关键代码:对象 Colleague 之间的通信封装到一个类中单独处理。

         应用范例:

1、中国加入 WTO 之前是各个国家相互贸易,结构复杂,现在是各个国家通过 WTO 来互相贸易。

2、机场调度系统。

3、MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。

         优点:

1、降低了类的复杂度,将一对多转化成了一对一。

2、各个类之间的解耦。

3、符合迪米特原则。

         缺点:中介者会庞大,变得复杂难以维护。

         使用场景:

1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。

2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

         注意事项:不应当在职责混乱的时候使用。          

实现

     我们通过聊天室范例来演示中介者模式。范例中,多个用户可以向聊天室发送消息,聊天室向所有的用户显示消息。我们将创建两个类 ChatRoom 和 User。User 对象使用 ChatRoom 方法来分享他们的消息。

      MediatorPatternDemo,我们的演示类使用 User 对象来显示他们之间的通信。

     点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

步骤 1

     创建中介类。                      

ChatRoom.java

import   java . util . Date ;

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

步骤 2

     创建 user 类。                      

User.java

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   sendMessage ( String   message ) {
       ChatRoom . showMessage ( this , message ) ;
    }
}

步骤 3

     使用 User 对象来显示他们之间的通信。                      

MediatorPatternDemo.java

public   class   MediatorPatternDemo   {
    public   static   void   main ( String [ ]   args )   {
       User   robert  =  new   User ( " Robert " ) ;
       User   john  =  new   User ( " John " ) ;

       robert . sendMessage ( " Hi! John! " ) ;
       john . sendMessage ( " Hello! Robert! " ) ;
    }
}

步骤 4

     执行程序,输出结果:

Thu Jan 31 16:05:46 IST 2013 [Robert] : Hi! John!

Thu Jan 31 16:05:46 IST 2013 [John] : Hello! Robert!






程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-02-10 22:08:36 重新编辑]
  Java面向对象编程-->Java注解
  JavaWeb开发-->JSP中使用JavaBean(Ⅰ)
  JSP与Hibernate开发-->第一个helloapp应用
  Java网络编程-->用Axis发布Web服务
  精通Spring-->创建综合购物网站应用
  Vue3开发-->组合(Composition)API
  详细介绍float和double类型的区别
  面试官:NIO的优化实现原理了解吗?图文结合教你如何正确避坑
  面试官问:如何排除Java虚拟机的GC引起的CPU飙高?
  JDK14的新特性
  请求大佬们的帮助
  volatile 实现原理
  邀请您一起来祝福和祈祷,祈愿疫情早日消除,平安吉祥
  java常见的几种调用机制:同步调用,异步调用,回调
  Java入门实用代码:集合转数组
  Java 入门实用代码: 数组差集
  Java入门实用代码: 字符串格式化
  Java入门实用代码:字符串替换
  java使用gzip实现文件解压缩示例
  【Java 并发笔记】CountDownLatch 相关整理
  Java Pattern和Matcher字符匹配详解
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。