中介,我相信大家肯定不会陌生,职业中介,房屋中介(看到房屋中介这个字眼,就想起我被黑中介黑的痛苦经历,兄弟姐妹们以后找中介一定要小心啊—_—!),婚恋中介这些中介结构相信大家肯定非常熟悉,从他们提供的服务的种类也许千差万别,当从它们经营服务的方式来看,我们可以总结出它们共同的特点:为2种不同类型的客户群提供桥梁的作用。
比如房屋中介,我们需要找房子,但是我们不知道那里有房主可以提供房屋给我们租。同样需要出租房子的房主也不知道那里有想租房子的客户,而提供房屋中介服务的中介机构就可以解决这样的问题,中介可以让2种不同需求的客户群经过它们的服务来使客户群的需求得到相互满足。
其实在设计模式中的Mediator模式它的理念其实和现实的中介机构也一样,也是提供中介服务。当然从更加抽象的角度来说的话,Mediator模式的意图便是将对象集合之间的交互封装起来,(通俗的来说也就是将租房人和出租人分离开来,不让他们之间打交道,而必须要由中介来操作)减少对象之间的耦合程度,避免对象之间的显示引用,还可以让对象间的交互独立变化。
比如偶们写个租房程序,客户类想租房,一般来说我们就得显示调用房主这个类的具体方法,看是否它能租房给我。可是从类结构来看,客户类和房主类便耦合到一起,这样的设计缺点是显而易见的。而利用中介者的设计意图,我们就可以解决对象之间的显示调用问题,减少耦合度。
下面的代码便能很好的解释Mediator模式设计意图:
colleagueA 想调用colleagueB和colleagueC的方法如果用常规的方式,那便是显示调用colleagueB和colleagueC。但是经过ConcreteMediator中介类的作用,便达到不需要显示调用其它类,但是仍然可以使用其功能的作用。
执行结果:
=======colleagueA=========
ConcreteColleagueB
ConcreteColleagueC
=======colleagueB=========
ConcreteColleagueA
ConcreteColleagueC
=======colleagueC=========
ConcreteColleagueA
ConcreteColleagueB
其实中介者模式在Java领域有着很多应用,传统的MVC结构便是一个典型的中介者模式,Module 通过Control和View产生关系,而大家最为熟悉的Struts实现原理便是一个典型的中介者模式:
ActionServlet负责对HttpServletRequest的请求分配合适的Action进行处理,而不让他们之间产生任何显示的联系。
好了,关于中介者模式介绍到这里,我将在下一篇中介绍责任模式之Chain of Responsibility.