行为模式:中介者模式

本文解释了“行为模式:中介者模式”以解决相关问题。

文章首发:

行为模式:中介者模式

十一种行为模型中的第二种:中介模型。

介绍

名称:中介者模式

英文名称:Mediator Pattern

价值观:让你体验中介无所不能的存在

自我介绍:

定义一个对象,该对象封装一组对象如何交互。Mediator 通过阻止对象显式地相互引用来促进松散耦合,并且它允许您独立地改变它们的交互。

封装一系列与中介对象的对象交互。中介者使每个对象在没有显式交互的情况下进行交互,从而使其松耦合并且可以独立地改变它们之间的交互。

(来自设计模式之禅)

你想要的故事

看完这个小伙子的名字,大家都会直观的想到从我们这里拿了半个月房租的租房公司的同学。如果我不在这里谈租房中介,我以后就没有机会了。现在大家都在找房子,不管是买房还是租房子,只要登陆安居客、58同城,80%的房源是否都是经纪人,80%还是比较保守的。经过 4 次房屋搜索后,我找到了个人列表。越来越少。每个站点都有一个选项:经纪人列表。如下所示:

(图片来自:安居客网站)

经纪人扮演了中介的角色,这与本文所讨论的中介模式完全吻合。我们在找房子时,中介的作用是什么?我们通过个人房源和经纪人房源的出租案例简要描述经纪人的作用。

私人财产

我们通过个人房源找房的方式是:在网上找到个人房源的房东中介找房源的方法,然后一一联系,和房东预约看房。我们和房东的关系是一对多的关系。小明在网上查看了自己的个人房源,联系了房东,分别去看了农家院和社区房,代码表示如下。

public class PersonalTest { public static void main(String[] args) {      Tenant xiaoMing = new Tenant("小明");      xiaoMing.lookAtHouse();  }
}

中介找房源的方法_中介跟中介怎么套房源_找中介租房需要与中介签合同吗

class Tenant { private String name; private XiaoQuFangLandlord xiaoQuFangLandlord2 = new XiaoQuFangLandlord(); private NongMinFangLandlord nongMinFangLandlord2 = new NongMinFangLandlord(); public Tenant(String name) { this.name = name; } public void lookAtHouse() { System.out.println(this.name +"想看农民房"); nongMinFangLandlord2.supply(); System.out.println(this.name + "想看小区房"); xiaoQuFangLandlord2.supply(); } } /*** 房东*/ abstract class Landlord { // 提供房子 public abstract void supply(); } class XiaoQuFangLandlord extends Landlord { @Override public void supply() { System.out.println("小区房的房东提供一间小区房"); } } class NongMinFangLandlord extends Landlord { @Override public void supply() { System.out.println("农民房的房东提供一间小区房"); } } 打印结果如下: 小明想看农民房 农民房的房东提供一间小区房 小明想看小区房 小区房的房东提供一间小区房

小明分别联系了小区房东和农家房东,然后依次去看了农家和小区。这样做的坏处是小明和楼主的关系很密切。事实上,小明只是去看看房间而已。这个时候,代理就派上用场了。中介的主要任务是出租房子,所以他应该和房东有很强的关系。直到房子出租成功,他才会脱离房东,小明也不需要一一去。找房东看房后,这个责任就转给了中介。小明只需要联系一个人,就是经纪人,告诉他我想看民居和农家,经纪人会带他去看看。下面介绍一下券商的入驻方式,也就是本文要讲的中介模式。

经纪人名单

用经纪人的房源找房子,小明心里踏实了许多。小明只联系了一位经纪人,向他描述了他想要的房子:社区房和农家乐都有,经纪人同意了他的一套。下午,小明让他看到了所有他想看的房间,最后小明决定租个房间。看代码。

public class MediatorTest { public static void main(String[] args) {      System.out.println("小明想要看小区房和农民房");      Tenant2 xiaoMing = new Tenant2("小明", Arrays.asList("XiaoQuFang", "NongMinFang"));      xiaoMing.lookAtHouse();  }

中介跟中介怎么套房源_找中介租房需要与中介签合同吗_中介找房源的方法

} /*** 租客*/ class Tenant2 { private String name; private List wantTypes; private RentingMediator rentingMediator = new RentingMediator(); public Tenant2(String name, List wantTypes) { this.name = name; this.wantTypes = wantTypes; } public void lookAtHouse() { rentingMediator.supplyHouse(wantTypes); } } /*** 中介抽象类*/ abstract class Mediator { // 看房 public abstract void supplyHouse(List types); } /*** 租房中介*/ class RentingMediator extends Mediator { private XiaoQuFangLandlord xiaoQuFangLandlord; private NongMinFangLandlord nongMinFangLandlord; public RentingMediator() { xiaoQuFangLandlord = new XiaoQuFangLandlord(); nongMinFangLandlord = new NongMinFangLandlord(); } @Override public void supplyHouse(List types) { System.out.println("经纪人提供了如下房源"); if (types.contains("XiaoQuFang")) { xiaoQuFangLandlord.supply(); } if (types.contains("NongMinFang")) { nongMinFangLandlord.supply(); } } } 打印结果: 小明想要看小区房和农民房 经纪人提供了如下房源 小区房的房东提供一间小区房 农民房的房东提供一间小区房

在代码中,我们可以看到小明和经纪人是一对一的关系,经纪人和房东是一对多的关系。小明找房子的经历也轻松了许多,只用了一个下午的时间就看中了房子。这也是中介者模式的优点,减少了不必要的依赖,减少了类之间的耦合。

代码:

中介者模式

总结

中介者模式通过在相互依赖的对象之间增加一层,使原本强依赖的对象变为弱依赖。在软件编程中,有一个中介者模式的典型例子,就是MVC框架,也称为三层架构中介找房源的方法,它通过控制器(控制层)。协调模型和视图中的数据和界面交互。看看工作中的代码,想一想有没有什么关系非常密切、容易混淆的对象,考虑是否可以使用中介模式剥离依赖,让代码更清晰。