在我们的实际业务中,可能会有多个类相互调用,形成一个复杂的网络结构。这时候就需要有一种模式来“理顺”它们之间的关系,引出一个中介,让类之间不再相互调用。这种模式就是我们今天的主角——中介模式。1.概念理解首先看一下中介模式的官方概念:用一个中介对象来封装一系列的对象交互,中介使得各个对象之间无需显式引用就可以相互引用,从而实现松耦合和可以独立改变它们之间的相互作用。通俗的解释就是引入了一个“中介”来协调各个对象之间的关系。对象之间不需要直接调用。对象只需要调用中介的方法,中介在中介内部进行逻辑判断即可。对象的方法。概念基本清楚后,我们再来看中介模型中包含的角色:中介角色和各个对象的角色是必须的。在面向接口编程的原则下,中介和对象应该从接口中分离出来,所以在中介模式结构中包括四个角色(每个对象角色称为一个同事):1.中介者:中介者是一个接口,它定义Colleague对象之间的通信方法;2.ConcreteMediator:具体的中介者是实现中介者接口的类。具体中介需要包含对所有具体同事(ConcreteColleague)的引用,通过实现中介接口中的方法来满足具体同事之间的通信需求;3.同事:一个接口,指定具体同事需要实现哪些方法;4.具体同事(ConcreteColleague):实现了Colleague接口的类。特定同事需要包括对特定调解员的引用。当一个特定的同事需要与其他特定的同事进行交互时,他只需要将他的请求通知到它包含的特定调解器的引用。如果在一个业务场景中,一个公司有很多同事,同事1管理自己的数据,有时会调用同事2的数据。在中介模式下,同事1和同事2不再互相调用,而是被中介调用。中介对象必须持有在同事类中,中介方法必须有一个方法来确定它属于哪个角色。基于四个角色,实现初测的demo。读者可以拉取完整代码在本地学习,测试通过后将代码上传至码云。2.案例实现抽象同事类:中间人的引用应该放在抽象同事/***抽象同事类*@authortcy*@Date14-09-2022*/publicabstractclassColleague{//抽象中介引用受保护的Mediator中介;publicColleague(Mediatormediator){this.mediator=mediator;}//数据更新方法publicabstractvoidupdate();//数据变化方法publicabstractvoidchanged();}具体同事类1和2:具体同事类除了自身的业务逻辑,还应该有调用中介的额外方法/***具体同事2*@作者tcy*@Date14-09-2022*/publicclassConcreteColleague2extendsColleague{publicConcreteColleague2(Mediatormediator){super(mediator);}//自己的方法@Overridepublicvoidupdate(){System.out.println("更新同事类2");}//同事@Override的调用方法publicvoidchanged(){System.out.println("同事2班数据改变");调解员.操作(这个);}}/***具体同事1*@authortcy*@Date14-09-2022*/publicclassConcreteColleague1extendsColleague{publicConcreteColleague1(Mediatormediator){super(调解员);}@Overridepublicvoidupdate(){System.out.println("更新同事类1");}@Overridepublicvoidchanged(){System.out.println("同事1班数据变更");调解员.操作(这个);}}抽象中介:抽象中介应该持有所有同事对象,并且应该有调用其他同事的方法/***抽象中介*/publicabstractclassMediator{protectedArrayList
