MyBatis 用到了哪些设计模式?

MyBatis在其设计和实现过程中使用了多种设计模式,以下是其中的一些:

  1. 工厂模式:在MyBatis中,SqlSessionFactory负责创建SqlSession,这是典型的工厂模式。工厂模式提供了一个创建对象的接口,但允许子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

  2. 单例模式:SqlSessionFactoryBuilder在构建SqlSessionFactory的时候,使用了单例模式。SqlSessionFactory一旦被创建,应在应用执行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。使用SqlSessionFactory的最佳实践是在应用运行期间不要重复创建多次,多次创建SqlSessionFactory被视为一种代码“坏习惯”。因此,最佳范围是应用范围。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

  3. 建造者模式:SqlSessionFactoryBuilder使用了建造者模式。建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在MyBatis中,使用SqlSessionFactoryBuilder可以通过XML配置文件或者一个Java Configuration类构建出SqlSessionFactory。

  4. 代理模式:MyBatis对Mapper接口实现了Java动态代理,用户可以直接通过接口和接口方法调用数据库操作,而无需手动编写DAO实现。代理模式为其他对象提供一种代理以控制对这个对象的访问。

  5. 模板方法模式:MyBatis的Executor执行器,是基于模板方法模式设计的。模板方法模式定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

  6. 装饰器模式:在MyBatis的缓存设计中,为了增加缓存的各种行为,比如定时清空、LRU淘汰等,采用了装饰器模式。装饰器模式可以动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活。

  7. 策略模式:在MyBatis处理类型转换时,采用了策略模式。策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,策略模式让算法的变化独立于使用算法的客户。

以上就是MyBatis中用到的一些设计模式,通过这些设计模式的使用,MyBatis的代码结构更加清晰,扩展性和可维护性也更强。

发表评论

后才能评论