5.行为模式-中介者模式

中介者模式(MediatorPattern)

定义

中介者模式是一种行为型设计模式,定义了一个对象来封装一组对象之间的交互。通过引入一个中介者对象,多个对象不再直接相互引用,而是通过中介者来进行交互,从而降低对象之间的耦合性。

核心思想

中介者模式的核心思想是将对象之间的复杂交互逻辑集中管理,将对象之间的直接依赖转换为对中介者的依赖。这样做不仅简化了对象之间的通信,还增强了系统的灵活性和可维护性。

组成部分

Mediator(中介者接口):定义了一个接口用于对象间的通信,通常包括通知和协调的职责。

ConcreteMediator(具体中介者):实现中介者接口,负责管理和协调相关对象的交互。

Colleague(同事类接口):定义了与中介者进行交互的接口,通常包括接收中介者通知的方法。

ConcreteColleague(具体同事类):实现同事类接口,通过中介者与其他同事类进行通信。

类图示例

+-------------------++-------------------++-------------------+|Mediator|--------|Colleague||ConcreteColleague|+-------------------++-------------------++-------------------+|+notify()||+setMediator()||||+s()|||+-------------------++-------------------++-------------------+^|+-------------------+|ConcreteMediator|+-------------------+|+notify()||+s()|+-------------------+

类图解释

Mediator:中介者接口,定义了协调各个同事类的方法,如notify()和s()。

ConcreteMediator:具体中介者类,实现中介者接口,管理具体的同事类之间的交互。

Colleague:同事类接口,定义了与中介者进行交互的方法,通常包括接收中介者通知的方法。

ConcreteColleague:具体同事类,通过中介者与其他同事类进行通信。

代码示例

以下是一个中介者模式的示例,演示了如何通过中介者协调多个对象之间的通信:

//中介者接口interfaceMediator{voidnotify(Colleaguecolleague,Stringevent);}//同事类接口abstractclassColleague{protectedMediatormediator;publicColleague(Mediatormediator){=mediator;}publicabstractvoiddoAction();}//具体同事类1classConcreteColleague1extsColleague{publicConcreteColleague1(Mediatormediator){super(mediator);}@OverridepublicvoiddoAction(){("ConcreteColleague1doesanaction.");(this,"Action1");}publicvoidreactOnAction(){("ConcreteColleague1reactsonaction.");}}//具体同事类2classConcreteColleague2extsColleague{publicConcreteColleague2(Mediatormediator){super(mediator);}@OverridepublicvoiddoAction(){("ConcreteColleague2doesanaction.");(this,"Action2");}publicvoidreactOnAction(){("ConcreteColleague2reactsonaction.");}}//具体中介者类classConcreteMediatorimplementsMediator{privateConcreteColleague1colleague1;privateConcreteColleague2colleague2;publicvoidsetColleague1(ConcreteColleague1colleague1){=colleague1;}publicvoidsetColleague2(ConcreteColleague2colleague2){=colleague2;}@Overridepublicvoidnotify(Colleaguecolleague,Stringevent){if(colleagueinstanceofConcreteColleague1){();}elseif(colleagueinstanceofConcreteColleague2){();}}}//客户端代码publicclassMediatorPatternExample{publicstaticvoidmain(String[]args){ConcreteMediatormediator=newConcreteMediator();ConcreteColleague1colleague1=newConcreteColleague1(mediator);ConcreteColleague2colleague2=newConcreteColleague2(mediator);(colleague1);(colleague2);();();}}

代码解释

Mediator接口:定义了notify()方法,用于接收同事类的事件并通知其他同事类。

ConcreteMediator类:实现了中介者接口,负责协调ConcreteColleague1和ConcreteColleague2之间的交互。

Colleague类:抽象同事类,持有中介者的引用,通过中介者与其他同事类进行通信。

ConcreteColleague1和ConcreteColleague2类:具体同事类,执行某些操作,并通过中介者与对方进行通信。

MediatorPatternExample类:客户端代码,通过中介者协调两个具体同事类之间的交互。

优点

减少对象之间的直接依赖:中介者模式将对象之间的交互集中在一个中介者对象中,避免了多个对象之间直接依赖,使得系统更加松耦合。

集中管理交互逻辑:中介者模式将复杂的交互逻辑集中在中介者中,便于管理和修改。

提高系统灵活性:通过引入中介者,系统可以更容易地增加或修改同事类,而不需要修改其他同事类的代码。

缺点

中介者可能变得复杂:随着系统的扩展,中介者可能需要处理越来越多的交互逻辑,从而变得复杂且难以维护。

性能开销:引入中介者可能会增加系统的性能开销,特别是在频繁交互的场景中。

适用场景

多个对象之间有复杂的交互:如果多个对象之间存在复杂的交互逻辑,可以引入中介者模式,将这些交互集中管理。

对象之间的交互频繁变化:如果对象之间的交互逻辑经常变化,使用中介者模式可以简化代码的修改。

松耦合的系统设计:中介者模式适用于需要保持系统松耦合的场景,尤其是多个对象相互依赖时。

总结

中介者模式通过引入一个中介者对象,减少了对象之间的直接依赖,将复杂的交互逻辑集中在中介者中。它使系统更加灵活和可维护,适用于多个对象之间存在复杂交互的场景。在实际开发中,中介者模式被广泛应用于GUI应用程序、网络协议设计以及消息传递系统中。

版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。

相关推荐