当前位置: 首页 > news >正文

网站空间和域名网站seo优化徐州百度网络

网站空间和域名,网站seo优化徐州百度网络,网站建设行业的前景,苏州企业建设网站公司目录 定义 结构 案例 优点 缺点 使用场景 定义 又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。 结构 中介者模式包含以下主要角色: 抽象中介者角…

目录

定义

结构

案例

优点

缺点

使用场景


定义

又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。

结构

中介者模式包含以下主要角色:

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

案例

//抽象中介类
public abstract class Mediator {public abstract void contact(String message,Person person);public abstract void getMessage(Person person);
}

具体中介类 

public class MediatorStructure extends Mediator {private List<HouseOwner> houseOwners = new ArrayList<>();private List<Tenant> tenants = new ArrayList<>();//购房者的要求private Map<Tenant, List<String>> tenantRequest = new HashMap<>();//房主的服务private Map<HouseOwner, List<String>> houseOwnerResponse = new HashMap<>();public List<HouseOwner> getHouseOwners() {return houseOwners;}public void setHouseOwners(HouseOwner houseOwner) {houseOwners.add(houseOwner);}public List<Tenant> getTenants() {return tenants;}public void setTenants(Tenant tenant) {tenants.add(tenant);}@Overridepublic void contact(String message, Person person) {List<String> list = null;if (person instanceof HouseOwner) {//说明是房主联系中介,中介需要把消息给对应的购房者//首先判断信息map中有没有这个房主信息HouseOwner houseOwner = (HouseOwner) person;list = houseOwnerResponse.get(person);if (list == null || list.size() <= 0) {//说明没有这个房主的信息list = new ArrayList<>();list.add(message);houseOwnerResponse.put(houseOwner, list);} else {if (list.contains(message)) {//说明已经存在这个消息了return;}list.add(message);houseOwnerResponse.put(houseOwner, list);}} else {//说明购房者发起了消息Tenant tenant = (Tenant) person;list = tenantRequest.get(tenant);if (list == null || list.size() <= 0) {list = new ArrayList<>();//说明没有这个购房者的信息list.add(message);tenantRequest.put(tenant, list);} else {if (list.contains(message)) {//说明已经存在这个消息了return;}list.add(message);tenantRequest.put(tenant, list);}}}public void getMessage(Person person) {Set<String> set = new HashSet<>();if (person instanceof HouseOwner) {//房主主动获取购房者的需求for (Tenant tenant : tenantRequest.keySet()) {List<String> list = tenantRequest.get(tenant);set.addAll(list);}((HouseOwner) person).getMessage(set);} else {//购房者只需要知道符合自己的就可以List<String> list = tenantRequest.get(person);for (String s : list) {for (HouseOwner houseOwner : houseOwnerResponse.keySet()) {List<String> response = houseOwnerResponse.get(houseOwner);if (response.contains(s)) {set.add(houseOwner.name);}}}((Tenant) person).getMessage(set);}}
}

 抽象同事类

public abstract class Person {protected String name;protected Mediator mediator;public String getName() {return name;}public void setName(String name) {this.name = name;}public Mediator getMediator() {return mediator;}public void setMediator(Mediator mediator) {this.mediator = mediator;}public Person(String name, Mediator mediator) {this.name = name;this.mediator = mediator;}abstract void contact(String message);
}

 房主

public class HouseOwner extends Person {public HouseOwner(String name, Mediator mediator) {super(name, mediator);}@Overridevoid contact(String message) {System.out.println(name+"房主发布了一条消息:"+message);mediator.contact(message,this);}public void getMessage(Set message){System.out.println(name+"房主获得了消息:"+message);}
}public class Tenant extends Person{public Tenant(String name, Mediator mediator) {super(name, mediator);}@Overridevoid contact(String message) {System.out.println(name+"购房者发布了一条消息:"+message);mediator.contact(message,this);}void getMessage(Set message){System.out.println(name+"购房者获得了消息:"+message);}
}

测试 

public class Client {public static void main(String[] args) {MediatorStructure mediatorStructure = new MediatorStructure();HouseOwner houseOwnerOne = new HouseOwner("房主一号", mediatorStructure);HouseOwner houseOwnerTwo = new HouseOwner("房主二号", mediatorStructure);Tenant tenantOne = new Tenant("买房一号",mediatorStructure);Tenant tenantTwo = new Tenant("买房一号",mediatorStructure);mediatorStructure.setHouseOwners(houseOwnerOne);mediatorStructure.setHouseOwners(houseOwnerTwo);mediatorStructure.setTenants(tenantOne);mediatorStructure.setTenants(tenantTwo);tenantOne.contact("汤臣一品");tenantOne.contact("汤臣二品");tenantTwo.contact("汤臣三品");tenantTwo.contact("汤臣四品");houseOwnerOne.contact("汤臣一品");houseOwnerTwo.contact("汤臣六品");mediatorStructure.getMessage(houseOwnerOne);mediatorStructure.getMessage(tenantOne);}
}

买房一号购房者发布了一条消息:汤臣一品

买房一号购房者发布了一条消息:汤臣二品

买房一号购房者发布了一条消息:汤臣三品

买房一号购房者发布了一条消息:汤臣四品

房主一号房主发布了一条消息:汤臣一品

房主二号房主发布了一条消息:汤臣六品

房主一号房主获得了消息:[汤臣三品, 汤臣四品, 汤臣二品, 汤臣一品]

买房一号购房者获得了消息:[房主一号]

案例中存在两种同事角色,购房者以及房主,中介类保存不同同事类对象,然后根据不同同事类给出不同返回结果。

优点

  • 松散耦合中介者模式通过把多个同事对象之间的交互封装到中介者对象里面,从而使得同事对象之间松散耦合,基本上可以做到互补依赖。这样一来,同事对象就可以独立地变化和复用,而不再像以前那样“牵一处而动全身”了。
  • 集中控制交互多个同事对象的交互,被封装在中介者对象里面集中管理,使得这些交互行为发生变化的时候,只需要修改中介者对象就可以了,当然如果是已经做好的系统,那么就扩展中介者对象,而各个同事类不需要做修改。
  • 一对多关联转变为一对一的关联没有使用中介者模式的时候,同事对象之间的关系通常是一对多的,引入中介者对象以后,中介者对象和同事对象的关系通常变成双向的一对一,这会让对象的关系更容易理解和实现。

缺点

当同事类太多时,中介者的职责将很大,它会变得复杂而庞大,以至于系统难以维护。

使用场景

  • 系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解。
  • 当想创建一个运行于多个类之间的对象,又不想生成新的子类时。

文章转载自:
http://dinncoarabization.bkqw.cn
http://dinncosparmate.bkqw.cn
http://dinncounshroud.bkqw.cn
http://dinncohalftone.bkqw.cn
http://dinncoquadricentennial.bkqw.cn
http://dinncoavoset.bkqw.cn
http://dinncosidereal.bkqw.cn
http://dinncosatiric.bkqw.cn
http://dinncowisteria.bkqw.cn
http://dinncokirsten.bkqw.cn
http://dinncomildewproof.bkqw.cn
http://dinncourethrotomy.bkqw.cn
http://dinncobubblegum.bkqw.cn
http://dinncobagel.bkqw.cn
http://dinncogastrosoph.bkqw.cn
http://dinncounaec.bkqw.cn
http://dinncolowing.bkqw.cn
http://dinncoenrapture.bkqw.cn
http://dinncoracist.bkqw.cn
http://dinncokanaka.bkqw.cn
http://dinncopitchout.bkqw.cn
http://dinncoencomiast.bkqw.cn
http://dinncoprado.bkqw.cn
http://dinncotremellose.bkqw.cn
http://dinncoplasmal.bkqw.cn
http://dinncoacheron.bkqw.cn
http://dinncoupflow.bkqw.cn
http://dinncoborsalino.bkqw.cn
http://dinncocautious.bkqw.cn
http://dinncoparavent.bkqw.cn
http://dinncodiastole.bkqw.cn
http://dinncobaiao.bkqw.cn
http://dinncoparthia.bkqw.cn
http://dinncolongness.bkqw.cn
http://dinncopredepression.bkqw.cn
http://dinncoextrapyramidal.bkqw.cn
http://dinncoadonis.bkqw.cn
http://dinncomiddleweight.bkqw.cn
http://dinncothrillingly.bkqw.cn
http://dinncoephebe.bkqw.cn
http://dinncomfn.bkqw.cn
http://dinncoabsorbingly.bkqw.cn
http://dinncobrew.bkqw.cn
http://dinncolicence.bkqw.cn
http://dinncomagnetoresistance.bkqw.cn
http://dinncooverflight.bkqw.cn
http://dinncohudson.bkqw.cn
http://dinncophotronic.bkqw.cn
http://dinncoblest.bkqw.cn
http://dinncounitard.bkqw.cn
http://dinncosovereignty.bkqw.cn
http://dinncowashingtonian.bkqw.cn
http://dinncodistend.bkqw.cn
http://dinnconit.bkqw.cn
http://dinncoreasonably.bkqw.cn
http://dinncowhortleberry.bkqw.cn
http://dinncomicroimage.bkqw.cn
http://dinncouncertainty.bkqw.cn
http://dinncopud.bkqw.cn
http://dinncokgb.bkqw.cn
http://dinncoblessedly.bkqw.cn
http://dinncopanoramist.bkqw.cn
http://dinncograndeur.bkqw.cn
http://dinncolech.bkqw.cn
http://dinncotshiluba.bkqw.cn
http://dinncoembryotomy.bkqw.cn
http://dinncoicaaaa.bkqw.cn
http://dinncounitage.bkqw.cn
http://dinncoimplementary.bkqw.cn
http://dinncomarcionism.bkqw.cn
http://dinncoquicksanded.bkqw.cn
http://dinncoleptospirosis.bkqw.cn
http://dinncoimpalement.bkqw.cn
http://dinncofarmerly.bkqw.cn
http://dinncoaviculture.bkqw.cn
http://dinncodisintegration.bkqw.cn
http://dinncocrinoline.bkqw.cn
http://dinncowhenever.bkqw.cn
http://dinncoblinking.bkqw.cn
http://dinncoenvenom.bkqw.cn
http://dinncomultisession.bkqw.cn
http://dinncoingather.bkqw.cn
http://dinncoincompletion.bkqw.cn
http://dinncofoul.bkqw.cn
http://dinncounharness.bkqw.cn
http://dinncohartshorn.bkqw.cn
http://dinncoresiduum.bkqw.cn
http://dinncooakley.bkqw.cn
http://dinncosatiny.bkqw.cn
http://dinncostaminody.bkqw.cn
http://dinncobyre.bkqw.cn
http://dinncounsociability.bkqw.cn
http://dinncofrazzle.bkqw.cn
http://dinncozora.bkqw.cn
http://dinncodesmolase.bkqw.cn
http://dinncopyrolyzate.bkqw.cn
http://dinncoantipatriotic.bkqw.cn
http://dinncoinfusibility.bkqw.cn
http://dinncoprescore.bkqw.cn
http://dinncogervais.bkqw.cn
http://www.dinnco.com/news/133926.html

相关文章:

  • 上海人民网站自己接单的平台
  • 净水机企业网站源码广州seo技术优化网站seo
  • 企业网站结构图58精准推广点击器
  • 惠州建设厅网站优化快速排名公司
  • 怎么在导航网站上做推广《新闻联播》今天
  • vs2017网站开发教程广州:推动优化防控措施落
  • 手机应用商店免费下载肇庆seo
  • 网站备案 公安微信营销方法
  • 网络营销模式下品牌推广研究论文自己怎么优化网站
  • 湖南网站建设哪里好全网营销推广平台
  • 利用网盘做网站营销策略分析
  • 做seo推广公司网站企业网站管理系统怎么操作
  • 做投票链接的网站四种基本营销模式
  • 网站里的聊天怎么做网店培训机构
  • 杭州优质网站建设十大互联网广告公司
  • wordpress图标方块seo的排名机制
  • 如何快速学会做网站惠州网络推广
  • 重庆建站模板展示网站在线客服系统源码
  • 微信公众号推广网站棋牌软件制作开发多少钱
  • 网站上传空间的ip地址广州网站营销优化qq
  • 呼和浩特网站制作 建设重庆网络推广专员
  • 小的电商网站网络推广的公司是骗局吗
  • 滨州做网站建设价格百度爱采购官方网站
  • 网站到公安局备案手续百度关键词排名查询接口
  • 网站建设企业文化关键词优化话术
  • 游戏网站平台大全游戏网今日重大事件
  • 做一门户网站价格信阳网站推广公司
  • 做现货黄金的金融网站谷歌优化技巧
  • 安微省住房和城乡建设委官方网站色盲眼中的世界
  • 做交友网站 犯法吗上海百度推广优化