中介者模式
创始人
2024-11-13 10:37:37
0次

目录

1.核心思想

2.成员

3.优点

4.代码实现

4.1 中介者接口

4.2 具体中介者

4.3 同事接口

4.4 具体同事接口

4.5 测试类

5.框架源码

5.1 Spring Framework - ApplicationContext作为中介者

5.2 ORM框架(例如Hibernate)- Session作为中介者


1.核心思想

通过引入一个中介者对象,封装一系列对象的交互方式。减少对象之间的依赖,通过中介者进行交互。

2.成员

中介者(Mediator):

中介者是模式的核心部分,它定义了对象间交互的协议。

中介者通常是一个接口或者抽象类,它声明了各种对象之间交互的方法。

具体的中介者实现了这些方法,负责实际的协调和管理对象之间的交互。

同事对象(Colleague):

同事对象是指通过中介者对象来进行交互的对象。

同事对象之间通常并不直接相互通信,而是通过中介者来进行间接的交互。

同事对象实现了各自的业务逻辑,但是在需要和其他对象交互时,会通过中介者来完成。

3.优点

减少耦合: 中介者模式通过减少对象之间的直接交互,降低了它们之间的耦合度。每个对象都只需与中介者进行通信,而无需了解其他对象的具体实现细节。

集中控制: 中介者模式集中了控制对象之间的交互逻辑。这样可以更方便地修改和扩展系统的行为,只需修改中介者即可,而无需修改所有相关的对象。

简化对象: 对象可以专注于自身的功能,而不需要关注与其他对象的交互方式,从而简化了对象的实现。

支持松耦合: 中介者模式支持系统的松耦合设计,使得系统更易于理解和维护,同时也提高了系统的灵活性和可扩展

4.代码实现

4.1 中介者接口

//中介者 public interface Intermediaries {     void constact(String message,Colleague colleague); }

4.2 具体中介者

public class IntermediariesClient implements Intermediaries{     private ColleagueClient1 colleagueClient1;     private ColleagueClient2 colleagueClient2;      public ColleagueClient1 getColleagueClient1() {         return colleagueClient1;     }      public void setColleagueClient1(ColleagueClient1 colleagueClient1) {         this.colleagueClient1 = colleagueClient1;     }      public ColleagueClient2 getColleagueClient2() {         return colleagueClient2;     }      public void setColleagueClient2(ColleagueClient2 colleagueClient2) {         this.colleagueClient2 = colleagueClient2;     }      @Override     public void constact(String message, Colleague colleague) {         if (colleague == colleagueClient1){             colleagueClient1.send(message);         }else if (colleague == colleagueClient2){          colleagueClient2.reception(message);         }     } }

4.3 同事接口

public abstract class Colleague {     protected String name;     protected Intermediaries intermediaries;      public Colleague(String name, Intermediaries intermediaries) {         this.name = name;         this.intermediaries = intermediaries;     } }

4.4 具体同事接口

public class ColleagueClient1 extends Colleague{       public ColleagueClient1(String name, Intermediaries intermediaries) {         super(name, intermediaries);     }      public void constact(String message) {         intermediaries.constact(message,this);     }      public void send(String message){         System.out.println(name+"发送消息"+message);     } }  public class ColleagueClient2 extends Colleague{     public ColleagueClient2(String name, Intermediaries intermediaries) {         super(name, intermediaries);     }      public void constact(String message) {         intermediaries.constact(message,this);     }      public void reception(String message){         System.out.println(name+"接收信息,回复"+message);     } }

4.5 测试类

public class Test {     public static void main(String[] args) {         //创建聊天群         IntermediariesClient intermediariesClient = new IntermediariesClient();         //两个用户         ColleagueClient1 colleagueClient1 = new ColleagueClient1("小乔", intermediariesClient);         ColleagueClient2 colleagueClient2 = new ColleagueClient2("大乔", intermediariesClient);         //将用户添加到群里         intermediariesClient.setColleagueClient1(colleagueClient1);         intermediariesClient.setColleagueClient2(colleagueClient2);         //发送之后通过中介者转发         colleagueClient1.constact("大乔,你好,我是小乔");         colleagueClient2.constact("小乔,你好,我是大乔.收到");     } }

5.框架源码

5.1 Spring Framework - ApplicationContext作为中介者

在Spring框架中,ApplicationContext 充当了一个 IoC(Inversion of Control,控制反转)容器和 Bean 的管理中心。Spring框架中的ApplicationContext充当了中介者的角色,通过集中管理Bean的依赖注入、事件传播、AOP切面等功能,帮助开发者实现了高度解耦和灵活的应用架构。

依赖注入(Dependency Injection):Spring通过ApplicationContext来管理和注入bean之间的依赖关系。各个Bean不再需要直接引用其他Bean,而是通过ApplicationContext自动注入所需的依赖,从而降低了组件之间的耦合度。

事件传播(Event Propagation):ApplicationContext支持事件的发布与订阅机制,允许各个组件之间通过事件进行松耦合的通信。组件可以发布事件,而其他组件可以通过监听器订阅这些事件,ApplicationContext负责事件的传播和管理。

AOP(面向切面编程):Spring的AOP功能允许将横切关注点(如日志记录、事务管理)从业务逻辑中抽离出来。ApplicationContext作为中介者管理AOP切面的应用,确保各个Bean在运行时被适当地增强。

Bean的生命周期管理:ApplicationContext负责管理和维护Bean的生命周期,包括实例化、初始化、销毁等阶段。这种集中的管理方式使得应用的配置和组件之间的交互更加灵活和可控。

5.2 ORM框架(例如Hibernate)- Session作为中介者

在对象关系映射(ORM)框架中,如Hibernate,Session扮演了中介者的角色,管理应用程序与数据库之间的交互过程。Hibernate的Session作为中介者,隐藏了数据库访问的细节,使得应用程序能够专注于业务逻辑的开发,同时提供了高度的灵活性和可维护性。

实体管理:Session负责管理应用中的持久化实体对象,通过映射将这些对象持久化到数据库中,或从数据库中加载到应用中。

事务管理:Hibernate的Session管理事务的生命周期,包括事务的开始、提交和回滚。它确保数据的一致性和完整性,并处理潜在的并发访问问题。

查询执行:Session允许应用程序执行各种类型的查询(如HQL、Criteria查询),并将查询结果转换为对象形式,从而隐藏了底层数据库的复杂性。

缓存管理:Session管理多级缓存,包括一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存),以提升应用程序的性能和响应。

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...