23种设计模式+额外常用设计模式汇总 (持续更新)

引入

  • 在面向对象系统的设计和开发过程中,对象之间的交互和通信是最为常见的情况,因为对象间的交互本身就是一种通信。
  • 在系统比较小的时候,可能对象间的通信不是很多、对象也比较少之我们可以直接硬编码到各个对象的方法中。
  • 当系统规模变大,对象的量变引起系统复杂度的急剧增加,对象间的通信也变得越来越复杂,这时候我们就要提供一个专门处理对象间交互和通信的类,这个中介者就是Mediator模式。
  • Mediator模式将对象间的交互和通信封装在一个类中,各个对象间的通信不必显式去声明和引用,大大降低了系统的复杂性能(了解一个对象总比深入熟悉n个对象要好)。
  • Mediator模式还带来了系统对象间的松耦合

定义

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

模式结构

  • Mediator模式中,各个Colleague维护-一个Mediator,.当要进行交互,例如图中ConcreteCoHeague1和ConcreteColleague2之间的交互就可以通过ConcreteMediator提供的方法来处理
  • ConcreteColleague1和ConcreteColleague2不必维护对各自的引用,甚至它们也不知道各个的存在。Mediator通过这种方式将多对多的通信简化为了一(Mediator)对多(Colleague) 的通信。

优点

  • Mediator模式是一种很有用并且很常用的模式,它通过将对象间的通信封装到一个类中,将多对多的通信转化为一对多的通信,降低了系统的复杂性。
  • Mediator还获得系统解耦的特性,通过Mediator,各个Colleague就不必维护各自通信的对象和通信协议,降低了系统的耦合性,Mediator和各个Colleague就可以相互独立地修改了。
  • Mediator模式还有一个很显著的特点就是将控制集中,集中的优点就是便于管理,也正符合了OO设计中的每个类的职责要单一和集中的原则。

缺点

  • 由于控制的集中化,于是把交互复杂性变味了中介者的复杂性,这就使得中介者会变得比任何一个- ConcreteColleague都复杂。

门面模式和中介者模式

  • 门面(Facade)模式和中介者(Mediator)模式有着共同的目的。它们都是调配一组相互耦合的对象的通信。不过门面模式关注的是这组复杂对象如何与外界通信,而中介者模式是调配这组复杂对象之间的通信。
  • 可以组合使用,来实现当同事对象发生改变的时候,通知中介对象,让中介对象去进行与其他相关对象的交互

本质

  • 封装交互
    一个类知道信息越少越好,随着ConcreteColleague的数量的变多,如果不采用中介者模式的话,那么每两个类之间实现通信的话是(N-1)N/2的连接,先不说原则不原则的事情,当到10个ConcreteColleague类的时候就要写25次通信,那么复制粘贴也要很久。为了能够使多个对象能够实现通信,所以采用中介者模式。

实现

package 中介者模式//抽象同事类public   abstract class Colleague{protected Mediator mediator;public Colleague(Mediator mediator){this.mediator = mediator;}}package 中介者模式public   abstract class Mediator{public abstract void Send(string message, Colleague colleague);}package 中介者模式//具体同事类public class ConcreteColleague1 extends Colleague{public ConcreteColleague1(Mediator mediator)   { super( mediator);}public void Send(string message){mediator.Send(message, this);}public void Notify(string message){System.out.println ("同事1得到信息:" + message);}}public   class ConcreteColleague2 extends  Colleague{public ConcreteColleague2(Mediator mediator)  { super( mediator);}public void Send(string message){mediator.Send(message, this);}public void Notify(string message){System.out.println ("同事1得到信息:" + message);}}//具体中介者类public   class ConcreteMediator extends Mediator{private ConcreteColleague1 colleague1;private ConcreteColleague2 colleague2;public setColleague1(ConcreteColleague1 Colleague1){this.Colleague1=Colleague1;}public setColleague1(ConcreteColleague2 Colleague2){this.Colleague2=Colleague2;}public override void Send(string message, Colleague colleague){if(colleague==colleague1){colleague2.Notify(message);}else{colleague1.Notify(message);}}}public class Program{public static void Main(string[] args){ConcreteMediator m = new ConcreteMediator();ConcreteColleague1 c1=new ConcreteColleague1(m);ConcreteColleague2 c2 = new ConcreteColleague2(m);m.Colleague1 = c1;m.Colleague2 = c2;c1.Send("XXXXXXX");c2.Send("YYYYYYY");Console.Read();}}
}

『设计模式』电话接线员与中介者模式相关推荐

  1. Java设计模式之行为型:中介者模式

     前言: 在我们的生活中处处充斥着"中介者",比如你租房.买房.找工作.旅游等等可能都需要那些中介者的帮助,地球上国与国之间的关系异常复杂,会因为各种各样的利益关系来结成盟友或者敌 ...

  2. 『设计模式』之小试牛刀

    为了更好的学习设计模式,以及督促自己完成设计模式的学习,现提笔为记. 怎么的,每周至少也要学一个设计模式!!! 恳请大家的监督和不吝赐教,共同学习和进步! 内容主要参考自<设计模式之禅>以 ...

  3. 『设计模式』HR:不会设计模式,你好意思来面试?(面试必备设计模式)

    23种设计模式+额外常用设计模式汇总 (持续更新) 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一 ...

  4. 『设计模式』不看就亏了的设计模式总结

    23种设计模式+额外常用设计模式汇总 (持续更新) 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一 ...

  5. 『设计模式』80年代的人们就已经领悟了设计模式-- 发布者/订阅者模式 (包括发布者/订阅者模式和观察者模式的区别)

    23种设计模式+额外常用设计模式汇总 (持续更新) 发布-订阅模式 在软件架构中,发布订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者).而是将发布的消息分为 ...

  6. 『设计模式』写代码偷懒小技巧,程序开发大智慧--享元模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 享元模式 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提 ...

  7. 『设计模式』简单工厂模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 简单工厂模式 简单工厂模式也被称为静态工厂模式;使用简单工厂模式可以将产品的"消费"和生产完全分开,客户端只需要知道自己需要什么 ...

  8. 设计模式笔记十八:中介者模式

    原文:http://www.runoob.com/design-pattern/ 少许个人理解,如有错误请指出.欢迎一起讨论. 中介者模式(Mediator Pattern) 是用来降低多个对象和类之 ...

  9. Android设计模式(十六)-中介者模式

    原文地址 http://blog.csdn.net/qq_25806863/article/details/69396448 中介者模式又叫调解者模式或调停者模式,是行为型设计模式之一. 生活中的中介 ...

最新文章

  1. Python学习【第七篇】基本数据类型
  2. 匿名内部类和匿名类_匿名schanonymous
  3. 动作定位、检测与理解,ICCV 2021 DeeperAction挑战赛开启~
  4. Navicate在同步oracle数据,不同数据库之间同步
  5. ASP.NET中Form验证登录后反复跳转回登录页面的问题
  6. chrome redhat 下载源_RedHat 7.0 Chrome浏览器 安装
  7. 【硬件测评】电脑测评工具箱及方法汇总
  8. 云计算机遇与挑战,中国云计算产业发展面临机遇与挑战
  9. redis集群伸缩【转】
  10. 十个最好的免费网络硬盘
  11. Feign整合Sentinel实现容错
  12. JMS ActiveMQ
  13. Oracle_勒索病毒解决方案
  14. css3下雪的效果,首页下雪效果
  15. 前端页面使用的icon图标
  16. 无线通信基础 无线信道统计描述(一)
  17. 【能力提升】SQL Server常见问题介绍及快速解决建议
  18. 【知识图谱】神经网络综述
  19. Unity-3D捕鱼达人小游戏开发 —— 起因和开始的设置以及准备工作
  20. 卡通冰材质的简单实现

热门文章

  1. std::reserve和std::resize的区别
  2. session共享mysql_多服务器session共享之mysql共享
  3. linux进程通信ips,Cisco IPS 分析引擎拒绝服务漏洞(CVE-2014-0718)
  4. java jsonp_java结合使用Jsonp的例子
  5. 设计模式 抽象工厂模式(Abstract Factory)
  6. Java技巧: 根据网址查询DNS/IP地址
  7. Linux安装rpc监控系统资源
  8. 看完这些福利才知道,为什么说双12一定要出去浪
  9. WWDC 2014 Session笔记 - 可视化开发,IB 的新时代
  10. 解读2014之前端篇:任性的颠覆式改变