自学内容网 自学内容网

高级java每日一道面试题-2025年01月19日-框架篇[Mybatis篇]-MyBatis 中见过什么设计模式 ?

如果有遗漏,评论区告诉我进行补充

面试官: MyBatis 中见过什么设计模式 ?

我回答:

1. 工厂模式(Factory Pattern)

定义:工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式,将对象创建过程抽象化,从而提高代码的可维护性和灵活性。

在MyBatis中的应用

  • SqlSessionFactoryBuilderSqlSessionFactory 的创建过程体现了工厂模式的应用。SqlSessionFactoryBuilder 负责读取 MyBatis 配置文件,并构建出 SqlSessionFactory 实例。
  • Mapper接口的实现:MyBatis 使用工厂模式来动态生成 Mapper 接口的实现类。当调用 getMapper() 方法时,MyBatis 根据映射配置为每个 Mapper 接口创建代理实例。

2. 单例模式(Singleton Pattern)

定义:单例模式确保一个类只有一个实例,并提供一个全局访问点,保证在整个应用程序生命周期内共享同一个实例。

在MyBatis中的应用

  • SqlSessionFactory 是单例模式的经典案例。一旦通过 SqlSessionFactoryBuilder 创建了 SqlSessionFactory 实例后,该实例会在整个应用程序中被复用,避免了重复创建实例所带来的资源浪费。
  • TypeAliasRegistry 和其他注册表也通常是单例的,确保类型别名和其他配置信息在整个应用程序中的一致性。

3. 建造者模式(Builder Pattern)

定义:建造者模式旨在将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示,简化了对象的构造过程。

在MyBatis中的应用

  • XMLConfigBuilderXMLMapperBuilder 等类使用了建造者模式来解析 MyBatis 的配置文件和映射文件。这些 Builder 类逐步构建出配置信息和映射信息,提高了代码的清晰度和可维护性。
  • SqlSessionFactoryBuilder 也是建造者模式的一个例子,它负责根据配置创建 SqlSessionFactory

4. 代理模式(Proxy Pattern)

定义:代理模式为其他对象提供一个代理以控制对这个对象的访问,通常用于添加额外的功能而不改变原有接口。

在MyBatis中的应用

  • Mapper接口的实现:MyBatis 使用 JDK 动态代理或 CGLIB 来生成 Mapper 接口的代理实现。代理对象拦截方法调用,执行必要的 SQL 操作,并返回结果。这种方式允许 MyBatis 在不修改业务代码的情况下插入事务管理、缓存处理等横切关注点。
  • 懒加载机制:MyBatis 中的延迟加载功能也是通过代理模式实现的,它允许查询操作的结果集在真正需要时才被加载,提高了性能。

5. 模板方法模式(Template Method Pattern)

定义:模板方法模式定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中,允许子类在不改变算法结构的情况下重定义某些步骤。

在MyBatis中的应用

  • BaseExecutor 类是模板方法模式的具体体现。它定义了数据库操作的基本流程(如查询、更新、提交事务等),但具体的执行逻辑由其子类(如 SimpleExecutorBatchExecutor 等)实现。
  • SQL语句执行流程:无论是 SELECT 还是 INSERT/UPDATE/DELETE 操作,MyBatis 都遵循一定的流程模板,只是具体的操作细节有所不同。

6. 策略模式(Strategy Pattern)

定义:策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换,支持运行时动态选择算法。

在MyBatis中的应用

  • 缓存策略:MyBatis 支持多种缓存策略(如一级缓存、二级缓存),并且允许用户配置不同的缓存实现(例如 EHCache、OSCache)。这体现了策略模式,使得框架具有高度的灵活性和扩展性。
  • 事务管理策略:MyBatis 支持不同的事务管理器(如 JDBC 事务管理器、Spring 管理的事务管理器),允许根据环境需求选择合适的事务管理策略。

7. 观察者模式(Observer Pattern)

定义:观察者模式定义了一种依赖关系,当一个对象状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

在MyBatis中的应用

  • Configuration对象:在 MyBatis 中,Configuration 对象会监听映射文件的解析事件,并在解析完成后更新自己的状态。此外,当有新的映射文件被加入或者现有映射文件被修改时,Configuration 也会相应地作出调整。
  • 插件机制:MyBatis 的插件系统也是一种观察者模式的应用,插件可以在特定的时间点拦截并处理请求,例如在执行 SQL 之前或之后。

8. 适配器模式(Adapter Pattern)

定义:适配器模式将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

在MyBatis中的应用

  • ResultSetHandler:MyBatis 中的 ResultSetHandler 接口及其默认实现 DefaultResultSetHandler 是适配器模式的应用。它把 JDBC 的 ResultSet 对象转换为 POJO 或其他形式的数据结构,以适应应用程序的需求。这种模式允许 MyBatis 将底层的 JDBC 结果集与上层的应用程序数据模型进行适配。

9. 责任链模式(Chain of Responsibility Pattern)

定义:责任链模式为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

在MyBatis中的应用

  • 插件机制:MyBatis 的插件机制是责任链模式的一个实例。你可以开发多个插件,它们按照一定的顺序被调用,每个插件都有机会处理请求或响应,或者决定是否传递给下一个插件。这种模式使得插件可以依次处理请求,直到某个插件处理完毕或所有插件都尝试过。

综上所述,MyBatis 广泛采用了上述九种设计模式,这些模式不仅提升了框架本身的内聚性、可扩展性和灵活性,也为开发者提供了强大的工具来解决持久层开发中的复杂问题。在面试中,能够详细阐述这些设计模式在 MyBatis 中的具体应用及其带来的好处,有助于展示你的技术深度和广度。


原文地址:https://blog.csdn.net/qq_43071699/article/details/145249147

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!