动手写一个中介者模式(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; } @Override public String send() { System.out.println("我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01B:发送信息是:"+getSendStringparameter()); return "我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01A:发送信息是:"+getSendStringparameter(); } @Override public 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; } @Override public String send() { System.out.println("我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01B:发送信息是:"+getSendStringparameter()); return "我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01B:发送信息是:"+getSendStringparameter(); } @Override public 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; } @Override public String send() { System.out.println("我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01B:发送信息是:"+getSendStringparameter()); return "我是"+super.typeobString+"方,昵称是:"+super.nameString+"Colleague01A:发送信息是:"+getSendStringparameter(); } @Override public 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()); } } } }
2022临高乡村振兴发展论坛欢乐跑12月15日下午1400,由海南省旅游和文化广电厅临高县人民政府指导,临高县旅游和文化广电体育局主办的临高乡村振兴发展论坛欢乐跑活动,在临高县金沙滩碧海大道东侧举行,吸引了来自海南
安徽有座被誉为中国最美的文艺乡村,一个隐匿于田野之间的乌托邦秋日生活打卡季住在西递一家民宿,老板介绍我们附近有座小村庄,没有什么商业化,是很多喜欢艺术的文艺青年流连忘返之地,于是有了这篇文章!九月初的安徽,微风徐徐拂过非常的舒服,每位到安徽
张家界国家森林公园多举措复苏旅游市场来源人民网湖南频道12月15日,江苏游客在张家界国家森林公园游玩。吴勇兵摄围绕三个转型,聚力三个创新,复苏旅游市场,着力打造世界级旅游景区。12月15日,在张家界武陵源风景名胜区和
男女之间,真正爱过了以后,一辈子再也忘不掉!我们很多人都想这样的一个话题,很多人都能理解太多,都能想到太多,每个人都会有自己的想法,都会有自己的看法。男女之间,一旦深度体验爱的过程以后,一辈子再也忘不掉了,那么是不是这样的一
时间带走了些什么,时间留下了些什么其实一珏才28岁,28岁不算老吧,但也足够有光阴可说了。因为一珏最爱的外公在2022年的夏天离开她了,自此之后,当她一个人的时候,眼前越来越多闪过与外公有关的光阴。回想最多的还是童
中国斯诺克选手参与打假球引发大地震,我们该如何看待呢?在头条看见彼此斯诺克英格兰公开赛还在进行中,可是没了中国选手的比赛还有多少人观看呢?最近一段时间,中国斯诺克界梁文博等人以赌球为目的操纵比赛结果的打假球事件引发了大地震!作为一个资
散文裁一片冬阳给菊花应是冬阳说了一个笑话,把满山的菊花都惹笑了。有的前仰后合,哈哈大笑。有的忍俊不禁,半掩芳唇。靠近我脚边的两朵,一朵面向我,张开薄薄的粉黄花靥,似有吟吟笑声入耳。一朵扭头掩面,仍不能
美丽中国阳光照耀思茅松万掌山林场风光。(万掌山林场供图)我们去看思茅松。林场的车在弯弯曲曲的盘山道行驶,一路花红树绿,鸟唱风吟。绕来绕去,就绕到了一大片高高密密的森林。这放眼看不透有多深多阔自然神秘的森
周长行原创丨手机终将一钱不值(散文)手机终将一钱不值文周长行像我这样的古稀且愚笨之人,也有资格谈手机吗?乍看上去,似有点搞笑,实际上是手机普及化全民化生活化了的缩影或象征,如今莫说是古稀之人,就是百岁老人玩手机的也不
朝颜当花瓣离开花朵散文当花瓣离开花朵朝颜一次一次从街区里穿行,不经意间得出一个结论城市里的桂花树是一日一日地多了起来。四季桂月月桂,遍布街道小区景点绿化带,不论季节,不分昼夜地兀自香着。我时常觉得,这种
小小的麻雀风一样的飞(散文)休息日的傍晚,夕阳正好。独自正在阳台里读散文,一只小麻雀象一股轻风一样飘落在了窗台上。它先静静的看我一眼,仿佛若有所思,然后又东张西望,好象偶然路过。我们就这样隔窗相望,我的眼睛和