动手写一个中介者模式(Java版)实现房子出售和业主买房信息需求

动手写一个中介者模式(Java版)实现房子出售和业主买房信息需求

模式定义与特点

中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。

主要优点如下

  • 类之间各司其职,符合迪米特法则。
  • 降低了对象之间的耦合性,使得对象易于独立地被复用。
  • 将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。
  • 主要缺点是

    中介者模式将原本多个对象直接的相互依赖变成了中介者和多个同事类的依赖关系。当同事类越多时,中介者就会越臃肿,变得复杂且难以维护。

    模式的结构与实现

    中介者模式实现的关键是找出“中介者”,下面对它的结构和实现进行分析。

    1. 模式的结构

  • 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。
  • 具体中介者(Concrete Mediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
  • 抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。
  • 具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。
  • 示例1,使用interface接口实现方式

    /** * @descript 这是一个中介者类 * 作用1 注册同事类 * 作用2 负责同事类之前的转发工作 * @author 79197 */public interface Intermediary01 {public void register(Colleague01 colleague);public void transmit(Colleague01 colleague);}public class Intermediary01Implement implements Intermediary01{private List colleagueObj=new ArrayList();//注册同事类public void register(Colleague01 colleague) {if(!colleagueObj.contains(colleague)) {colleague.setIntermediary01(this);colleagueObj.add(colleague);}}//转发public void transmit(Colleague01 colleague) {for(Colleague01 obj:colleagueObj) {if(!obj.equals(colleague) && !obj.typeobString.equals(colleague.typeobString)) {obj.receive(colleague.send());}}}}/** * @descript 这是一个同事类 * 作用1 定义不同各类,方便区分同事类 * 作用2 聚合中介者类 * 作用3 定义和其它同事类交互的类,即发送消息的类 * 作用4 定义接收其它同事类 * @author 79197 */abstract class Colleague01 {protected Intermediary01 intermediary01;String typeobString;String nameString;String sendStringparameter;public String getSendStringparameter() {return sendStringparameter;}public void setSendStringparameter(String sendStringparameter) {this.sendStringparameter = sendStringparameter;}public Colleague01(String typeobStringparameter,String nameStringparameter) {typeobString=typeobStringparameter;nameString=nameStringparameter;}public void setIntermediary01(Intermediary01 intermediary01temp) {this.intermediary01=intermediary01temp;}public abstract String send();public abstract void receive(String sendcontext);}public class Colleague01A extends Colleague01{public Colleague01A(String typeobStringparameter,String nameStringparameter) {super(typeobStringparameter, nameStringparameter);}String sendStringparameter;public String getSendStringparameter() {return sendStringparameter;}public void setSendStringparameter(String sendStringparameter) {this.sendStringparameter = sendStringparameter;}@Overridepublic String send() {System.out.println(“我是”+super.typeobString+”方,昵称是:”+super.nameString+”Colleague01B:发送信息是:”+getSendStringparameter());return “我是”+super.typeobString+”方,昵称是:”+super.nameString+”Colleague01A:发送信息是:”+getSendStringparameter();}@Overridepublic void receive(String sendcontext) {System.out.println(“我是”+this.typeobString+”方,昵称是:”+this.nameString+”Colleague01A:接口信息是:”+sendcontext);}}public class Colleague01B extends Colleague01{public Colleague01B(String typeobStringparameter,String nameStringparameter) {super(typeobStringparameter, nameStringparameter);}String sendStringparameter;public String getSendStringparameter() {return sendStringparameter;}public void setSendStringparameter(String sendStringparameter) {this.sendStringparameter = sendStringparameter;}@Overridepublic String send() {System.out.println(“我是”+super.typeobString+”方,昵称是:”+super.nameString+”Colleague01B:发送信息是:”+getSendStringparameter());return “我是”+super.typeobString+”方,昵称是:”+super.nameString+”Colleague01B:发送信息是:”+getSendStringparameter();}@Overridepublic void receive(String sendcontext) {System.out.println(“我是”+super.typeobString+”方,昵称是:”+super.nameString+”Colleague01B:接口信息是:”+sendcontext);}}public class Colleague01C extends Colleague01{public Colleague01C(String typeobStringparameter,String nameStringparameter) {super(typeobStringparameter, nameStringparameter);}String sendStringparameter;public String getSendStringparameter() {return sendStringparameter;}public void setSendStringparameter(String sendStringparameter) {this.sendStringparameter = sendStringparameter;}@Overridepublic String send() {System.out.println(“我是”+super.typeobString+”方,昵称是:”+super.nameString+”Colleague01B:发送信息是:”+getSendStringparameter());return “我是”+super.typeobString+”方,昵称是:”+super.nameString+”Colleague01A:发送信息是:”+getSendStringparameter();}@Overridepublic void receive(String sendcontext) {System.out.println(“我是”+super.typeobString+”方,昵称是:”+super.nameString+”Colleague01A:接口信息是:”+sendcontext);}}

    测试类

    public class IntermediaryTest {public static void main(String[] args) {Colleague01 sellerObj=new Colleague01A(“链家卖方”,”小明”);//sellerObj.setSendStringparameter(“长安街有一套上好的房源,正规3室一厅,感兴趣的朋友可以私聊……”);Colleague01 buyerObj1=new Colleague01B(“业主”,”小张”);Colleague01 buyerObj2=new Colleague01C(“业主”,”小李”);buyerObj1.setSendStringparameter(“想购买一套房子”);Intermediary01 mediaryObj=new Intermediary01Implement();mediaryObj.register(sellerObj);mediaryObj.register(buyerObj1);mediaryObj.register(buyerObj2);mediaryObj.transmit(buyerObj1);}}

    示例2 抽象类的实现方式

    /** * @descript 这是一个中介者类 * 作用1 注册同事类 * 作用2 负责同事类之前的转发工作 * @author 79197 */abstract class Intermediary01 {abstract void register(Colleague01 colleague);abstract void transmit(Colleague01 colleague);}public class Intermediary01Implement extends Intermediary01{private List colleagueObj=new ArrayList();//注册同事类public void register(Colleague01 colleague) {if(!colleagueObj.contains(colleague)) {colleague.setIntermediary01(this);colleagueObj.add(colleague);}}//转发public void transmit(Colleague01 colleague) {for(Colleague01 obj:colleagueObj) {if(!obj.equals(colleague) && !obj.typeobString.equals(colleague.typeobString)) {obj.receive(colleague.send());}}}}

    郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
    (0)
    用户投稿
    上一篇 2022年6月15日
    下一篇 2022年6月15日

    相关推荐

    • 胡喜华:看好养老“蓝海” ,考验内功的时候来了

      从受人尊敬的人民教师,转型成为保额达2亿元的优秀保险人,胡喜华用了18年。作为一个重度微信朋友圈用户,她几乎每天都在分享优质的保险知识和丰富的团队风采。“她不仅是团队成员的老师,更…

      2022年8月1日
    • 700万签4人!罗马太抠门,引援全靠穆帅人格魅力,被榨干最后价值

      近日,根据罗马诺等名记的报道,自由球员迪巴拉要去罗马队了,他与罗马队签约3年,固定年薪450万欧元,还有150万欧元的奖金条款。据了解,是穆帅的电话打动了迪巴拉,穆帅曾对迪巴拉表示…

      2022年7月22日
    • 推特招聘团队裁员30%,不超过100人

      推特发布消息称,人才招聘团队将裁员30%。今年5月推特曾表示要暂停招聘、削减成本。因为业务需求出现变化,推特重组人才招聘团队,削减员工数量。裁员30%听起来很多,但实际受影响的人数…

      2022年7月10日
    • 沉淀的人和事值得珍惜

      本主婚前有几位谈得来的朋友,婚后由于异地加上要照顾孩子没有太多的精力去维护。N年后想用心去弥补,先在微信发个信息问候却迟迟没收到回复,心里难免五味杂陈,不知咋解?

      2022年5月1日
    • 你认为美国经济正在摇摇欲坠?

      美国投资者很 紧张。房屋销售量直线下降。受食品和汽油价格的挤压,美国人 开车减少 ,花更多的钱把食物放在餐桌上,从而限制了他们的预算。然而,尽管出现了这种难看的经济状况,美国可能还…

      2022年8月4日
    • 一个学历不如你的同事嘲笑你说还名牌大学毕业的呢,还不是跟我一样的工资,你会怎么办?

      【雨沫聊职场】的观点:(欢迎关注) 不要把时间浪费在一些没有意义的争辩上,特别是不要与不同层次的人去做一些无谓的争辩。 一、学历并不代表能力。 学历高并不代表他的能力就高,这是事实…

      2022年4月16日
    • 居家必玩的免费战争网游,《坦克世界》S系坦克组合礼包上线了

      最近的天气可真是两极分化严重,南方某些地区迎来了久违的阴雨天气,气温骤降;有些省份的高温预警却从来没停过,四川、重庆等地更是突破了40度!无论下雨天还是暴晒天,都不是适合出门的好天…

      2022年8月3日
    • 黑暗中的闪烁:科学家构建银河系超大质量黑洞的最精确模型

      外观可能具有欺骗性。白炽灯泡的光看起来很稳定,但实际上它每秒闪烁120次。因为大脑只感知它所接收到的信息的平均值,这种闪烁是模糊的,对持续照明的感知只是一种幻觉。虽然光线无法逃离黑…

      2022年6月25日
    • MySQL8.0数据库安装

      引言 1.1 编写目的 本系统实施维护手册的编写主要目的是对系统的安装部署以及运行过程中可能存在的问题进行原因分析,并针对问题进行相关解决。 1.2 读者对象 本文档预期的读者对象…

      2022年6月20日
    • 人啊,争什么,气什么,愁什么?看完此文我醒悟了

      杨绛先生说过: 人生一世,无非是认识自己,洗练自己,自觉自愿地改造自己,除非甘心与禽兽无异。 身而为人,我们总要经历一些磨炼与考验,才能拨开迷雾,看清自己,改变自己。 如此,才能将…

      2022年7月29日

    联系我们

    联系邮箱:admin#wlmqw.com
    工作时间:周一至周五,10:30-18:30,节假日休息