中介者模式

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

  • 优点
  1. 降低了类的复杂度,将一对多转化成了一对一;
  2. 各个类之间的解耦;
  3. 符合迪米特原则。
  • 缺点
  1. 中介者会庞大,变得复杂难以维护。
// 聊天室
public class ChatRoom {public static void showMessage(User user, String message){System.out.println("[" + user.getName() +"]:" + message);}
}@Data
@AllArgsConstructor
public class User {private String name;public void sendMessage(String message){ChatRoom.showMessage(this, message);}
}// 使用示例
public class Demo {public static void main(String[] args) {User robert = new User("Robert");User john = new User("John");robert.sendMessage("Hi! John!");john.sendMessage("Hello! Robert!");}
}

代码详解设计模式--中介者模式相关推荐

  1. 代码详解设计模式汇总

    小博Spring Boot快速入门GitChat https://gitbook.cn/gitchat/activity/5a444c451f6ee91a25846ac1 小博代码详解设计模式 篇章 ...

  2. 一看就懂!【英雄联盟锐雯】与 Python 详解设计模式之门面模式

    [网络配图] 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性.设计 ...

  3. 详解设计模式:组合模式

    组合模式(Composite Pattern),又叫部分整体模式,是 GoF 的 23 种设计模式中的一种结构型设计模式. 组合模式 是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组 ...

  4. 详解设计模式:桥接模式

    桥接模式(Bridge Pattern)也称为桥梁模式.接口模式或者柄体模式,有点像适配器模式,也是 GoF 的 23 种设计模式中的一种结构型设计模式. 桥接模式 是用于把抽象化与实现化解耦,使得二 ...

  5. 代码详解设计模式--模板模式

    模板模式   一个抽象类公开定义了执行方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行. 优点: 封装不变部分,扩展可变部分. 提取公共代码,便于维护. 行为由父类控制,子 ...

  6. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)

    园子里关于23种设计模式的博文已经可以说是成千上万.车载斗量.屯街塞巷.不计其数.数不胜数.摩肩接踵.汗牛充栋.车水马龙.门庭若市.琳琅满目直至让人眼花缭乱了.在这样的大环境下之所以来写设计模式类的博 ...

  7. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂) v阅读目录

    1楼留头头大神:http://www.cnblogs.com/toutou/p/4899388.html v阅读目录 v写在前面 v简单工厂模式 v工厂方法模式 v抽象工厂模式 v博客总结 v博客前言 ...

  8. 详解设计模式:建造者模式

    建造者模式(Builder Pattern)也叫做生成器模式,是 GoF 的 23 种设计模式的一种,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 当我们需要实列化一个 ...

  9. 详解设计模式之策略模式

    在讲策略模式之前,我们先看一个日常生活中的小例子: 现实生活中我们到商场买东西的时候,卖场往往根据不同的客户制定不同的报价策略,比如针对新客户不打折扣,针对老客户打9折,针对VIP客户打8折... 现 ...

最新文章

  1. c语言队列如何表示,队列的链式表示和实现(C语言)
  2. SMTP身份验证(LOGIN、PLAIN、CRAM-MD5)
  3. Google Hangouts支持使用Firefox WebRTC
  4. python--list
  5. 第十章 內核同步的方法
  6. 解决url中特殊字符截断参数的问题
  7. 搭建一个项目的准备工作
  8. Ibatis.Net 数据库操作(四)
  9. 入手Kindle 2
  10. 如何在Linux里面安装Java的运行环境(详细过程)
  11. DE2带的IP核ISP12362报错问题解决 Error:avalon_slave_1_irq: associatedAddressablePoint out of range...
  12. 蓝牙Sig Mesh 概念入门①——简单介绍
  13. ABP 使用[DontWrapResult]注解去掉接口返回的“__abp”
  14. 小米米兔机器人的发展史_小米米兔机器人体验:童年的记忆汹涌而来
  15. 三相电压型逆变器控制simulink
  16. matlab匿名函数实现含参变量的对分段函数的不定积分及绘图
  17. android旅游app动态的,Android平台深秋出游必备APP推荐
  18. 强大的开源跨平台绘图软件 - diagrams
  19. Java中的深拷贝与浅拷贝浅析
  20. java工资城市排行,深度集成!

热门文章

  1. java中jdbc查询有返回值_使用JdbcTemplate查询方法的返回值 | 学步园
  2. 线性代数-MIT 18.06-5(b)
  3. MSCOCO检测数据集类别中文名
  4. 从钉钉后台对接考勤打卡信息(仅供参考)
  5. Unity特效基础:粒子效果面板
  6. 用python3制作视频字幕,生成双英文双语字幕txt和srt文件使用百度和有道翻译自封装翻译接口,可以秒杀付费工具,字幕脚本为qiweb3远程 2022年5月29日
  7. MyBatis中达到where a and (b or c)形式
  8. java深拷贝的三种方式
  9. 微信小程序导出zip、excel、word、png到手机
  10. tp对接抖音sdk_Thinkphp集成抖音SDK的实现方法