生活中有一个叫做中介公司的存在,有时候确实帮我们省却了不少功夫。比如买房什么的,我们只需要跟说明我们的需求,中介会跟相应的房源联系,这省却了我们盲目地寻找,挨家挨户的看房。这就是中介这个工作存在的好处。其实,这也是我们今天要讲的中介者模式存在的作用。在没有中介者的情况下,所有的对象都需要认识其它对象。也就是说,对象之间是紧耦合的。有了中介之后,对象之间彻底解耦。就像我们有了中介之后,不需要盲目地跑各个楼盘,中介会根据我们的需求筛选出几个合适的楼盘,这省去了我们很多的时间和精力。
c.想定制一个分布在多个类中的行为,而又不想生成太多的子类。
2.优点a.痛过将对象彼此解耦,可以增加对象的复用性。
b.通过将控制逻辑集中,可以简化系统维护。
c.可以让对象之间所传递的消息变得简单而且大幅减少。
3.缺点如果设计不当,中介者对象本身由于逻辑关系比较多而变得过于复杂。
package mediatorpattern; public abstract class Mediator { public abstract void notice(String content); }然后是房产中介的实现,房产中介中的notice方法中根据传入的content进行逻辑判断,并操作相应对象。
package mediatorpattern; public class HouseMediator extends Mediator { public House lc,bgy; //初始化 public HouseMediator() { lc=new LvCheng(); bgy=new BiGuiYuan(); } @Override public void notice(String content) { // TODO Auto-generated method stub if(content.equals("采光好")) lc.action(); else if(content.equals("生活品质")) bgy.action(); else System.out.println("我再帮您看看有没有其它适合您的房源"); } }接下来是房源接口,统一接口,便于将房源对象传入中介时能够统一接口。
package mediatorpattern; public abstract class House { public abstract void action(); }具体房源的实现
package mediatorpattern; public class LvCheng extends House { @Override public void action() { // TODO Auto-generated method stub info(); } private void info() { System.out.println("这里是绿城房产,房源采光好,户型种类多"); } }
package mediatorpattern; public class BiGuiYuan extends House { @Override public void action() { // TODO Auto-generated method stub info(); } private void info() { System.out.println("这里是碧桂园,这里的房源高端大气上档次,是生活品质的象征"); } }然后是客户端代码,根据客户需求传入信息给中介,中介会作出相应操作。
package mediatorpattern; public class CustomorTest { public static void main(String[] args) { // TODO Auto-generated method stub Mediator md=new HouseMediator(); System.out.println("来了一位客户,想要采光好的房源"); md.notice("采光好"); System.out.println("---------------------"); System.out.println("又来了一位客户,想要有品质,高端的房源"); md.notice("生活品质"); System.out.println("---------------------"); System.out.println("又来了一位客户,想要一个单身公寓"); md.notice("单身公寓"); } }运行客户端代码,得到如下结果:
来了一位客户,想要采光好的房源 这里是绿城房产,房源采光好,户型种类多 --------------------- 又来了一位客户,想要有品质,高端的房源 这里是碧桂园,这里的房源高端大气上档次,是生活品质的象征 --------------------- 又来了一位客户,想要一个单身公寓 我再帮您看看有没有其它适合您的房源以上便是中介者模式的示例,从中可以发现,两类对象原本毫无关联,但是可以通过中介者模式可以将其进行松耦合关联起来。中介者的核心就是需要根据一类对象传入的信息进行逻辑判断,从而对另一类对象进行相应的操作。