Java设计模式之中介模式java

中介模式(MediatorPattern),属于行为型设计模式。目的是把系统中对象之间的调用关系从一对多转变成一对一的调用关系,以此来降低多个对象和类之间的通信复杂性。

在很多情况下,一个类中对象于对象之间的调用往往很容易形成网状结构,此时倘若一个对象发生改变,那么将会导致其他所有与之关联的对象进行修改,从而导致系统复杂性增加,且难以维护。

使用中介模式,可以通过向系统中引入中介类,将这种网状结构改为星型结构,各个对象直接不直接关联而是通过该中介类进行交互,当一个对象发生改变时,只需要在中介类中做出相应的修改即可,其他对象对此变化是无感的。

用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

使用下面图示可能会更好的进行表达

在我们日常生活中,处处存在中介模式的影子。

房产中介

有了房产中介,我们只需要联系中介小哥就行了,中介小哥有各个房东的钥匙,直接看房,十分方便。

线上招聘平台

有了线上招聘平台后,应聘者直接在平台上联系各个公司就好了,通过该平台,应聘者不仅可以看到各种大中小公司,还不会因为公司招聘流程的改变而受影响,因为应聘者在平台上的操作都是一样的。

在中介模式中,最重要的角色就是**中介角色(Mediator)**了,它用于在系统中各个对象之间建立关联关系。

抽象中介接口类(Mediator)

定义中介的功能。

具体中介类(MediatorImpl)

实现中介接口类定义的功能。在实现的功能逻辑中,给各个对象建立关联关系,因此中介类中需要维护一个包含关联的各个组件的集合并对该集合进行维护。

系统组件抽象接口类(Component)

定义系统中各个对象的功能。

系统组件具体实现类(AComponent、BComponent、CComponent)

实现各个对象的功能。

通过对中介模式中各个角色的分析,可得其通用UM图如下所示

以群发消息为例,每当我们在重大传统节日时,许多人喜欢使用短信群发的形式,将节日祝福一次性群发给他的亲朋好友们。这是一个非常好的案例,在没有群发功能的时候,我们想好一段祝福语后,需要一个接一个地对通讯录中的朋友进行发送短信(一对多);而后来有了群发功能后,我们选择群发功能,将亲朋好友都添加到这个功能中作为群发联系人,然后点击发送短信就可以将祝福发送给所有人了(一对一)。此时群发功能就相当于中介。

1.角色分析

联系人接口(Friend)

定义联系人的功能。在节日祝福中,我们通讯录中的联系人有个接收短信功能receiveMessage()就够了。

publicinterfaceFriend{voidreceiveMessage(Stringmessage);}具体联系人(FriendImpl)

实现联系人接口(Friend)定义的功能。假设联系人有三个:父亲、母亲、姐姐。

publicclassFatherimplementsFriend{@OverridepublicvoidreceiveMessage(Stringmessage){System.out.println("父亲收到短信:"+message);}}publicclassMotherimplementsFriend{@OverridepublicvoidreceiveMessage(Stringmessage){System.out.println("母亲收到短信:"+message);}}publicclassSisterimplementsFriend{@OverridepublicvoidreceiveMessage(Stringmessage){System.out.println("姐姐收到短信:"+message);}}抽象群发接口(SendGroup)

定义一个发送功能send(),以及对群发目标联系人的维护功能addFriend()、removeFriend()。

publicinterfaceSendGroup{voidaddFriend(Friendfriend);voidremoveFriend(Friendfriend);voidsend(Stringmessage);}具体群发中介类(SendGroupImpl)

实现抽象群发接口SendGroup定义的功能。前面分析中说过,中介类中需要维护一个包含所有联系人的集合并对其进行维护。

publicclassSendGroupImplimplementsSendGroup{privatefinalListfriendList=newArrayList<>();@OverridepublicvoidaddFriend(Friendfriend){if(!friendList.contains(friend)){friendList.add(friend);}}@OverridepublicvoidremoveFriend(Friendfriend){friendList.remove(friend);}@Overridepublicvoidsend(Stringmessage){for(Friendfriend:friendList){friend.receiveMessage(message);}}}客户端(MediatorClient)

新建一个客户端类对该案例进行演示

publicclassMediatorClient{publicstaticvoidmain(String[]args){Friendfather=newFather();Friendmother=newMother();Friendsister=newSister();//选择需要群发短信的联系人SendGroupsendGroup=newSendGroupImpl();sendGroup.addFriend(father);sendGroup.addFriend(mother);sendGroup.addFriend(sister);//群发短信sendGroup.send("新年快乐");}}运行该代码后得到以下输出

优点:

缺点:

对客户端的代码维护,转变为对中介类的维护,中介类变得庞大时也将同样难以维护。

THE END
1.网上房屋中介管理系统的设计与实现房屋中介信息管理系统设计与实现管理员可以通过选择公告类型管理,管理相关的公告类型信息,比如查看所有公告类型,删除无用公告类型,修改公告类型,添加公告类型等操作,公告类型管理界面设计如图5-4所示。 本文从用户对网上房屋中介管理系统的实际需求出发,设计本系统总体功能,然后结合使用Java语言、MySQL数据库、AJAX技术等相关技术,详细的编码实现本系统,最https://blog.csdn.net/qq_53944577/article/details/143084213
2.房产中介管理系统方案设计功能要求(10)房产中介管理系统实现用户输入新的密码后可以进行修改密码的操作,并且新的密码能正常使用。 (11)对进入系统的用户的权限管理可以进行添加、修改和删除操作。 (12)对系统的数据可以进行数据备份操作。 (13)对系统的数据可以进行数据还原操作。 2房产中介管理软件性能要求 http://www.myidp.net/softwareRead.php?id=14822
3.基于Web的房地产中介管理系统的设计与实现基于Web的房地产中介管理系统的设计与实现 李天华 开通知网号 【摘要】: 随着我国经济的迅速发展和城市化步伐的加快,住房问题越来越成为人们日益关心的问题,在这种背景下,房地产中介大量涌现,房地产业影响了我们每个人的生活,在欧美等国家,房地产中介管理信息系统技术比较成熟,管理方法比较完善,Web技术由于其方便完善的https://cdmd.cnki.com.cn/Article/CDMD-10614-1013148105.htm
4.一个房产交易系统的设计与实现一个房产交易系统的设计与实现,房产中介,B/S,房源信息,随着社会的发展和互联网络的普及,越来越多的人们倾向于在互联网上搜索信息,这对房产中介行业来说,是其发展的一个契机。建立自https://wap.cnki.net/lunwen-1013118923.nh.html
5.房产中介论文(12篇)房产中介论文:基于ASP.NET的房产中介系统的设计与实现 摘要:针对某房产中介公司的业务现状,系统设计总体上采用以Bowser/Server(简称B/S)的三层结构模型,选择Visual Studio 2005的开发环境,使用 2.0的开发技术,首先采用UML统一建模语言,根据系统需求进行总体设计,得出该系统需要实现房源信息管理、客户信息管理、加盟店信息https://www.youfabiao.com/fanwen/23027.html
6.毕业设计之房产中介系统源码liubo175175毕业设计之房产中介系统源码 本项目是大学毕业设计使用的。 功能如下: (1) 用户管理模块 用户管理模块实现的是对于手中有房源出租或出售(也可能是正在寻求房屋信息的求租求购者)的人,可以选择直接房屋系统的首页,查看最基本的房源以及需求信息,但若想自己的房源让更多的人知道就必须先进行用户的注册,登录以后发布信息https://www.cnblogs.com/liubo175175/p/4282995.html
7.房产中介管理信息系统(精选9篇)篇3:房产中介管理信息系统 1 房产测绘的内容 房产测绘就是运用测绘仪器、测绘技术、测绘手段来测定房屋、土地及其房产的自然状况、权属状况、位置、数量、质量以及利用状况的专业测绘。房产测绘的主要任务有:对房屋本身以及与房屋有关的建筑物和构筑物进行测量调查和绘图工作, 对土地以及土地上的荷载物进行测量调查和绘https://www.360wenmi.com/f/filevr2cf3s4.html
8.房地产管理系统12篇(全文)三、系统功能设计 房地产测绘信息管理系统将图形与属性信息完全融合在同一数据库内统一管理, 提供多种灵活的图形数据双向输入与输出接口;实用的图形数据拓扑、查询、数据检查、编辑、房产成果图的输出等功能;能与房地产管理局的房产网络办公自动化系统实现数据库的共享。系统能解决的问题有:查询地形图、案卷定号、浏览楼https://www.99xueshu.com/w/ikeyzds6jkgx.html
9.新通联:首次公开发行股票招股说明书股票频道体包装解决方案”服务模式的前提和不断实现技术创新的保证。公司的主要经营 管理者以及核心技术人员均拥有多年行业相关专业经验和较高的专业造诣,对瓦 楞包装和木包装产品研发与设计、生产技术与工艺、生产设备、行业发展趋势和 市场动态等包装产业链各个环节都具备相当深厚的经验,均为行业内的专家。公 司还聘请行业专https://stock.stockstar.com/notice/JC2015050500001040_39.shtml
10.的房产信息管理系统智能房产推荐及管理系统的设计与实现着房地产行业的快速发展和信息化建设的加速,房产信息的管理和展示需求日益增长。传统的房产管理模式已无法应对现今大规模的数据处理需求,尤其是在房源信息发布、更新、用户查询及管理方面存在明显的效率瓶颈。因此,开发一套基于现代化技术的房产信息管理系统,成为房地产中介、开发商和消费者的迫切需求。基于Spring Boot的房https://www.jianshu.com/p/8659e2cbc6df
11.头条文章除碳中和债外,交易商协会亦组织市场成员创新推出可持续发展挂钩债券(Sustainability-Linked Bond,简称SLB),SLB是指将债券条款与发行人可持续发展目标挂钩的债务融资工具,通过债券结构设计激励发行人制定和实现可持续发展目标,满足各类致力于实现可持续发展目标的企业融资需求。 https://card.weibo.com/article/m/show/id/2309634654898976260389
12.某房产中介连锁企业欲开发一个基于web的房屋中介信息系统,以有效2018年下半年软件设计师考试下午真题试题(案例分析)在线考试 试题内容 【说明】某房产中介连锁企业欲开发一个基于Web的房屋中介信息系统,以有效管理房源和客户,提高成交率。该系统的主要功能是:1.房源采集与管理。系统自动采集外部网站的潜在房源信息,保存为潜在房源。由经纪人联系确认的潜在房源变为房源,并添加出售/https://www.ruantiku.com/shiti/4076627514.html