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

衡水网站网站建设义乌市建设局官方网站

衡水网站网站建设,义乌市建设局官方网站,惠普网站建设的目标,南通网站建设服务Go和Java实现中介者模式 下面通过一个同事之间相互通信的例子来说明中介者模式的使用。 1、中介者模式 中介者模式是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类#xff0c;该类通常处理不同类之间的 通信#xff0c;并支持松耦合#xff0c;使代码…Go和Java实现中介者模式 下面通过一个同事之间相互通信的例子来说明中介者模式的使用。 1、中介者模式 中介者模式是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类该类通常处理不同类之间的 通信并支持松耦合使代码易于维护。中介者模式属于行为型模式。 意图用一个中介对象来封装一系列的对象交互中介者使各对象不需要显式地相互引用从而使其耦合松 散而且可以独立地改变它们之间的交互。 主要解决对象与对象之间存在大量的关联关系这样势必会导致系统的结构变得很复杂同时若一个对象发 生改变我们也需要跟踪与之相关联的对象同时做出相应的处理。 何时使用多个类相互耦合形成了网状结构。 如何解决将上述网状结构分离为星型结构。 关键代码对象 Colleague 之间的通信封装到一个类中单独处理。 应用实例1、中国加入 WTO 之前是各个国家相互贸易结构复杂现在是各个国家通过 WTO 来互相贸易。 2、机场调度系统。 3、MVC 框架其中C控制器就是 M模型和 V视图的中介者。 优点1、降低了类的复杂度将一对多转化成了一对一。 2、各个类之间的解耦。 3、符合迪米特原则。 缺点中介者会庞大变得复杂难以维护。 使用场景1、系统中对象之间存在比较复杂的引用关系导致它们之间的依赖关系结构混乱而且难以复用该 对象。 2、想通过一个中间类来封装多个类中的行为而又不想生成太多的子类。 注意事项不应当在职责混乱的时候使用。 适用性 一组对象以定义良好但是复杂的方式进行通信产生的相互依赖关系结构混乱且难以理解。 一个对象引用其他很多对象并且直接与这些对象通信导致难以复现该对象。 想定制一个分布在多个类中的行为而又不想生成太多的子类。 2、Go实现中介者模式 package mediator// Colleague同事类 type Colleague interface {Send(string)Notify(string) }package mediatorimport fmt// ColleagueA同事类A type ColleagueA struct {Mediator }func (colleagueA *ColleagueA) Send(message string) {colleagueA.Mediator.Send(message, colleagueA) }func (colleagueA *ColleagueA) Notify(message string) {fmt.Println(同事A得到信息: message) }package mediatorimport fmt// ColleagueB同事类B type ColleagueB struct {Mediator }func (colleagueB *ColleagueB) Send(message string) {colleagueB.Mediator.Send(message, colleagueB)}func (colleagueB *ColleagueB) Notify(message string) {fmt.Println(同事B得到信息: message)}package mediator// Mediator中介者类 type Mediator interface {Send(string, Colleague) }package com.mediator;// ConcreteMediator public class ConcreteMediator extends Mediator{private ColleagueA colleagueA;private ColleagueB colleagueB;public void setColleagueA(ColleagueA colleagueA) {this.colleagueA colleagueA;}public void setColleagueB(ColleagueB colleagueB) {this.colleagueB colleagueB;}Overridepublic void send(String message, Colleague colleague) {if (colleague colleagueA){colleagueB.notify(message);}else{colleagueA.notify(message);}} }package mainimport . proj/mediatorfunc main() {concreteMediator : ConcreteMediator{}colleagueA : ColleagueA{Mediator: concreteMediator}colleagueB : ColleagueB{Mediator: concreteMediator}concreteMediator.SetColleagueA(colleagueA)concreteMediator.SetColleagueB(colleagueB)colleagueA.Send(吃过饭了没?)colleagueB.Send(没有呢,你打算请客吗?) }# 程序输出 同事A得到信息:吃过饭了没? 同事A得到信息:没有呢,你打算请客吗?3、Java实现中介者模式 package com.mediator;// Colleague同事类 public abstract class Colleague {protected Mediator mediator;public Colleague(Mediator mediator){this.mediator mediator;}public void send(String message){this.mediator.send(message,this);}public abstract void notify(String message); }package com.mediator;// ColleagueA同事类A public class ColleagueA extends Colleague{public ColleagueA(Mediator mediator) {super(mediator);}Overridepublic void notify(String message){System.out.println(同事A得到信息:message);} }package com.mediator;// ColleagueB同事类B public class ColleagueB extends Colleague{public ColleagueB(Mediator mediator) {super(mediator);}Overridepublic void notify(String message){System.out.println(同事B得到信息:message);} }package com.mediator;// Mediator中介者类 public abstract class Mediator {public abstract void send(String message,Colleague colleague); }package com.mediator;// ConcreteMediator public class ConcreteMediator extends Mediator{private ColleagueA colleagueA;private ColleagueB colleagueB;public void setColleagueA(ColleagueA colleagueA) {this.colleagueA colleagueA;}public void setColleagueB(ColleagueB colleagueB) {this.colleagueB colleagueB;}Overridepublic void send(String message, Colleague colleague) {if (colleague colleagueA){colleagueB.notify(message);}else{colleagueA.notify(message);}} }package com.mediator;public class Test {public static void main(String[] args) {ConcreteMediator concreteMediator new ConcreteMediator();ColleagueA colleagueA new ColleagueA(concreteMediator);ColleagueB colleagueB new ColleagueB(concreteMediator);concreteMediator.setColleagueA(colleagueA);concreteMediator.setColleagueB(colleagueB);colleagueA.send(吃过饭了没?);colleagueB.send(没有呢,你打算请客吗?);} }# 程序输出 同事B得到信息:吃过饭了没? 同事A得到信息:没有呢,你打算请客吗?
http://www.zqtcl.cn/news/60885/

相关文章:

  • 在线免费开网站网站建设费入预付款什么科目
  • 网站 seo 设置个人网站备案名和运营
  • 中国铁建统一企业门户网站上海企业建设网站服务
  • 重庆网站网络推广个人ip打造范文
  • dwcc2017做网站教程中国室内设计师联盟
  • 网站建设html代码wordpress模板不好用
  • 中国空间站叫什么名wordpress整站导出
  • 大华天途建设集团网站网站架构制作
  • 学校门户网站建设工作汇报怎么做百度推广网站
  • 北京商城网站建设公司网站建站专业
  • 做网站界面用的软件北滘网站开发
  • 广西城乡与住房建设厅网站企业广告平面设计多少钱
  • 网站技术团队揭阳网站制作企业
  • 页游和做网站百度快速收录账号购买
  • 做免费网站需要营业执照吗wordpress 自动关键词
  • 电商网站开发文字教程银川网站开发培训
  • 信息展示网站系统网站管理员后台
  • 东莞网站建设备案中华建设网
  • 无锡网站服务公司个人性质的网站备案容易查
  • 荣成城乡建设局网站网站上常用字体
  • 做网站单页视频外贸圈是什么
  • 教育培训东莞网站建设济南造价工程信息网
  • wordpress定期修改密码谷歌seo济南
  • 怎样做网站呢仿爱奇艺网站源码
  • 建设局考试通知文件网站禁止显示网站目录
  • 购物网站建设的目的加强公司网站建设及数据库的通知
  • 网站建设教程浩森宇特wordpress 文章前空格
  • 创建一个网站多少钱高端网站定制
  • 网站icp 备案进度查询flash网站需要改变
  • 无锡企业网站制作报价中装建设集团股份有限公司