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

焦作网站建设公司哪家好/关键字参数

焦作网站建设公司哪家好,关键字参数,网站设置受信任,建设网站的拓扑图相信自己,请一定要相信自己 上一章简单介绍了观察者模式(二十), 如果没有看过, 请观看上一章 一. 中介者模式 引用 菜鸟教程里面中介者模式介绍: https://www.runoob.com/design-pattern/mediator-pattern.html 中介者模式(Mediator Pattern&#xff…

相信自己,请一定要相信自己

上一章简单介绍了观察者模式(二十), 如果没有看过, 请观看上一章

一. 中介者模式

引用 菜鸟教程里面中介者模式介绍: https://www.runoob.com/design-pattern/mediator-pattern.html

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。

这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。

中介者模式属于行为型模式

一.一 介绍

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

主要解决: 对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,
同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。

何时使用: 多个类相互耦合,形成了网状结构。

如何解决: 将上述网状结构分离为星型结构。

关键代码: 对象 Colleague 之间的通信封装到一个类中单独处理。

应用实例:
1、中国加入 WTO 之前是各个国家相互贸易,结构复杂,现在是各个国家通过 WTO 来互相贸易。
2、机场调度系统。
3、MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。

优点: 1、降低了类的复杂度,将一对多转化成了一对一。 2、各个类之间的解耦。 3、符合迪米特原则。

缺点: 中介者会庞大,变得复杂难以维护。

使用场景:
1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

注意事项: 不应当在职责混乱的时候使用。


组成角色具体关系
抽象中介者(Mediator)Mediator抽象中介者,定义了同事对象到中介者对象的接口
具体的中介者对象(ConcreteMediator)ConcreteMediator抽象同事类
抽象同事类(Colleague)Colleague抽象同事类
具体同事类(ConcreteColleague)PhoneColleague,TVColleague具体的同事类,会有很多, 每个同事只知道自己的行为,而不了解其他同事类的行为(方法), 但 是他们都依赖中介者对象

image-20230615190357472

二. 中介者模式实例

二.一 抽象同事类 Colleague

@Data
public abstract class Colleague {private String name;private Mediator mediator;public Colleague (String name, Mediator mediator) {this.name = name;this.mediator = mediator;}public abstract void sendCmd(String cmd);
}

二.二 具体同事类实现

二.二.一 手机实现

@Slf4j
public class PhoneColleague extends Colleague{public PhoneColleague(String name, Mediator mediator) {super(name,mediator);// 注册到中介集合里面。mediator.register(name,this);}@Overridepublic void sendCmd(String cmd) {getMediator().getCmdMessage(this.getName(),cmd);}public void call() {log.info(">>> {} 打电话",super.getName());}public void wx() {log.info(">>>>> {}打开微信",super.getName());}}

二.二.二 TV实现

@Slf4j
public class TVColleague extends Colleague{public TVColleague (String name, Mediator mediator) {super(name,mediator);// 注册到中介集合里面。mediator.register(name,this);}@Overridepublic void sendCmd(String cmd) {getMediator().getCmdMessage(this.getName(),cmd);}public void on() {log.info(">>> {} 开启电视",super.getName());}public void off() {log.info(">>>>> {} 关闭电视",super.getName());}}

二.三 抽象中介者 Mediator

public interface  Mediator {void register (String name, Colleague colleague) ;void getCmdMessage (String name, String cmd);}

二.四 具体中介者 ConcreteMediator

public class ConcreteMediator implements Mediator{private HashMap <String,Colleague> colleagueHashMap = new HashMap<>();@Overridepublic void register(String name, Colleague colleague) {colleagueHashMap.put(name,colleague);}@Overridepublic void getCmdMessage(String name, String cmd) {// 根据名称,获取信息.Colleague colleague = colleagueHashMap.get(name);if (colleague == null) {return ;}if (colleague instanceof TVColleague) {// 是电视相应的TVColleague tvColleague = (TVColleague) colleague;if ("on".equals(cmd)){tvColleague.on();}else if ("off".equals(cmd)){tvColleague.off();}}else if (colleague instanceof PhoneColleague) {// 是电视相应的PhoneColleague phoneColleague = (PhoneColleague) colleague;if ("call".equals(cmd)){phoneColleague.call();}else if ("wx".equals(cmd)){phoneColleague.wx();}}}
}

二.五 客户端调用

 @Testpublic void oneTest(){ConcreteMediator concreteMediator = new ConcreteMediator();Colleague tv1 = new TVColleague("tv1",concreteMediator);Colleague phone1 = new PhoneColleague("ph1",concreteMediator);Colleague phone2 = new PhoneColleague("ph2",concreteMediator);// 发送指令tv1.sendCmd("on");phone1.sendCmd("wx");phone2.sendCmd("call");}

image-20230615191126214

优点:

1.多个类相互耦合,会形成网状结构, 使用中介者模式将网状结构分离为星型结构,进行解耦

  1. 减少类间依赖,降低了耦合,符合迪米特原则

缺点:

  1. 中介者承担了较多的责任,一旦中介者出现了问题,整个系统就会受到影响
  2. 如果设计不当,中介者对象本身变得过于复杂,这点在实际使用时,要特别注意

本章节的代码放置在 github 上:


https://github.com/yuejianli/DesignPattern/tree/develop/Mediator


谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

http://www.jmfq.cn/news/4953745.html

相关文章:

  • 在香港做网站需要什么软件/免费数据分析网站
  • 马鞍山建设集团有限公司网站/福州百度seo
  • 手机网站前端用什么做/免费百度下载
  • 怎样做投资与理财网站/腾讯会议开始收费
  • 供应邯郸专业做网站/合肥seo网站管理
  • 阿里云服务器网站备案/免费seo在线优化
  • 长春 网站建设/网站seo关键词排名
  • 跳转链接/windows优化大师官方下载
  • 长春网站制作最专业/厦门seo优化
  • 中国建设网查询平台网址/uc浏览器关键词排名优化
  • 怎么做网站赌博/百度指数爬虫
  • 用文字写美食个人网站设计作品/长春seo顾问
  • 网站优化检测工具/郑州seo建站
  • 做特产的网站开张怎么宣传/win10优化大师有用吗
  • 广东网站推广策略/seo门户网价格是多少钱
  • 甘肃最新消息今天/如何优化搜索引擎的准确性
  • 网站内页全是404/关键词代发排名首页
  • 织梦系统 子网站/百度快速收录权限域名
  • 中投中原建设有限公司网站/鹤壁网络推广哪家好
  • php网站开发工具有哪些/重庆放心seo整站优化
  • 一款可做引流的网站源码/关键词是网站seo的核心工作
  • 动易网站模板下载/苏州seo网站系统
  • 美食网站建设的意义/360网站推广客服电话
  • 简单的报价表模板/上海优化网站seo公司
  • 网站子目录怎么做反向代理设置/2345网址导航设置
  • 怎么搜做传奇私服网站总出来/营销型企业网站诊断
  • 安徽禹尧工程建设有限公司网站/seo优化培训课程
  • wordpress工业产品企业网站主题/百度下载安装免费
  • 做短链的网站/2023年8月新冠又来了
  • 网站备案每年一次/网络广告营销的概念