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

网站建设鼠标滑动效果软文范例大全500字

网站建设鼠标滑动效果,软文范例大全500字,有没有哪个做美食的网站,wordpress设置2个网站吗MyBatis源码用了哪些设计模式?前言一、创建型模式工厂模式单例模式建造者模式二、结构型模式适配器模式代理模式组合模式装饰器模式三、行为型模式模板模式策略模式迭代器模式总结前言 在 MyBatis 的两万多行的框架源码中,使用了大量的设计模式对工程架…

MyBatis源码用了哪些设计模式?

  • 前言
  • 一、创建型模式
    • 工厂模式
    • 单例模式
    • 建造者模式
  • 二、结构型模式
    • 适配器模式
    • 代理模式
    • 组合模式
    • 装饰器模式
  • 三、行为型模式
    • 模板模式
    • 策略模式
    • 迭代器模式
  • 总结

前言

在 MyBatis 的两万多行的框架源码中,使用了大量的设计模式对工程架构中的复杂场景进行解耦,这些设计模式的巧妙使用是整个框架的精华。
在这里插入图片描述

一、创建型模式

工厂模式

工厂模式:简单工厂是一种创建型模式,在父类中提供一个创建对象的方法,允许子类决定实例对象的类型。

SqlSessionFactory 的结构如图所示。

在这里插入图片描述

场景介绍:SqlSessionFactory 是获取会话的工厂,每次使用MyBatis 操作数据库时, 都会开启一个新的会话。在会话工厂的实现中,SqlSessionFactory 负责获取数据源环境配置信息、构建事务工厂和创建操作SQL 的执行器,最终返回会话实现类。

同类设计:

  • SqlSessionFactory
  • ObjectFactory
  • MapperProxyFactory
  • DataSourceFactory

单例模式

Configuration 单例配置类的结构如图所示。
在这里插入图片描述
单例模式:是一种创建型模式,能够保证一个类只有一个实例,并且提供一个访问该实例的全局节点。

场景介绍:Configuration 是一个大单例,贯穿整个会话周期,所有的配置对象(如映射、缓存、入参、出参、拦截器、注册机和对象工厂等)都在Configuration 配置项中初始化, 并且随着SqlSessionFactoryBuilder 构建阶段完成实例化操作。

同类场景:

  • ErrorContext
  • LogFactory
  • Configuration

建造者模式

ResultMap 建造者模式的结构如图所示。
在这里插入图片描述
建造者模式:使用多个简单的对象一步一步地构建成一个复杂的对象,提供了一种创建对象的最佳方式。

场景介绍:建造者模式在MyBatis 中使用了大量的XxxxBuilder,将XML 文件解析到各类对象的封装中,使用建造者及建造者助手完成对象的封装。它的核心目的是不希望把过多的关于对象的属性设置写到其他业务流程中,而是用建造者方式提供最佳的边界隔离。

同类场景:

  • SqlSessionFactoryBuilder
  • XMLConfigBuilder
  • XMLMapperBuilder
  • XMLStatementBuilder
  • CacheBuilder

二、结构型模式

适配器模式

日志实现类的结构如图所示。
在这里插入图片描述
适配器模式:是一种结构型模式,能使接口不兼容的对象也可以相互合作。

场景介绍:正是因为有太多的日志框架,包括Log4j、Log4j2 和Slf4J 等,而这些日志框架的使用接口又各有差异,为了统一这些日志框架的接口,MyBatis 定义了一套统一的接口,为所有的其他日志框架的接口做相应的适配。

同类场景:主要集中在对Log 日志的适配上。

代理模式

代理模式的实现结构如图所示。
在这里插入图片描述
代理模式:是一种结构型模式,能够提供对象的替代品或占位符。代理控制元对象的访问,并且允许在将请求提交给对象前进行一些处理。

场景介绍:没有代理模式就不存在各类框架。就像MyBatis 中的MapperProxy 实现类, 代理工厂实现的功能就是完成DAO 接口的具体实现类的方法,配置的任何一个DAO 接口调用的CRUD 方法,都会被MapperProxy 接管,调用到方法执行器等,并返回最终的数据库执行结果。

同类场景:

  • DriverProxy
  • Plugin
  • Invoker
  • MapperProxy

组合模式

解析节点类的结构如图所示。
在这里插入图片描述
组合模式:是一种结构型模式,可以将对象组合成树形结构以表示“部分—整体” 的层次结构。

场景介绍:在MyBatis XML 动态的SQL 配置中,共提供了9 种标签(trim、where、set、foreach、if、choose、when、otherwise 和bind),使用者可以组合出各类场景的SQL 语句。而SqlNode 接口的实现就是每个组合结构中的规则节点,通过规则节点的组装,完成规则树组合模式的使用。

同类场景:主要体现在对各类SQL 标签的解析上,以实现SqlNode 接口的各个子类为主。

装饰器模式

二级缓存装饰器的实现结构如图所示。
在这里插入图片描述
装饰器模式:是一种结构型设计模式,允许将对象放入包含行为的特殊封装对象中, 为元对象绑定新的行为。

场景介绍:MyBatis 的所有SQL 操作都是经过SqlSession 调用SimpleExecutor 完成的, 而一级缓存的操作也是在简单执行器中处理的。这里的二级缓存因为是基于一级缓存刷新的,所以在实现上,通过创建一个缓存执行器,包装简单执行器的处理逻辑,实现二级缓存操作。这里用到的就是装饰器模式,也叫俄罗斯套娃模式。

三、行为型模式

模板模式

SQL 执行模板模式如图所示。
在这里插入图片描述
模板模式:是一种行为型模式,在超类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。场景介绍:存在一系列可被标准定义的流程,并且流程的步骤大部分采用通用逻辑,只有一小部分是需要子类实现的,通常采用模板模式来定义这个标准的流程。就像MyBatis 的BaseExecutor 就是一个用于定义模板模式的抽象类,在这个类中把查询、修改的操作都定义为一套标准的流程。

同类场景:

  • BaseExecutor
  • SimpleExecutor
  • BaseTypeHandler

策略模式

多类型处理器策略模式的结构如图所示。

在这里插入图片描述
策略模式:是一种行为型模式,能定义一系列算法,并将每种算法分别放入独立的类中,从而使算法的对象能够互相替换。

场景介绍:在MyBatis 处理JDBC 执行后返回的结果时,需要按照不同的类型获取对应的值,这样就可以避免大量的if 判断。所以,这里基于TypeHandler 接口对每个参数类型分别做了自己的策略实现。

同类场景:

  • PooledDataSource
  • UnpooledDataSource
  • BatchExecutor
  • ResuseExecutor
  • SimpleExector
  • CachingExecutor
  • LongTypeHandler
  • StringTypeHandler
  • DateTypeHandler

迭代器模式

拆解字段解析实现的结构如图所示。
在这里插入图片描述
迭代器模式:是一种行为模式,能在不暴露集合底层表现形式的情况下遍历集合中的所有元素。

场景介绍:PropertyTokenizer 用于MyBatis 的MetaObject 反射工具包下,用来解析对象关系的迭代操作。这个类在MyBatis 中使用得非常频繁,包括解析数据源配置信息并填充到数据源类上,同时参数的解析、对象的设置都会使用这个类。

同类场景:PropertyTokenizer。

总结

通过梳理,MyBatis大约运用了10种左右设计模式。可以说,复杂且优秀的ORM 框架源码在设计和实现的过程中都会使用大量的设计模式。

在解决复杂场景的问题时,需要采用分治、抽象的方法,运用设计模式和设计原则等相关知识,把问题合理切割为若干子问题,以便加以理解和解决。

http://www.yayakq.cn/news/370701/

相关文章:

  • 做网站要不要35类商标东莞互联网大公司有哪些
  • 阳泉市建设局网站营销广告语
  • 大兴做网站公司网络营销推广方式都有哪些
  • 怎么做彩票网站平台weex做的网站
  • 临清网站建设价格wordpress 文章页 tag
  • 怎么做企业网站原型什么是网站建设技术
  • 佛山建站佛山网页设计wordpress图片主题
  • .net mvc做网站什么网站可以做兼职美工
  • 扬州公司做网站网页设计师培训水公司
  • 徐州网站建设哪家专业南阳手机网站制作
  • 手机qq网页版网站怎么做网页上小广告
  • 绵阳网站排名网站访问速度 云组机
  • 江苏省建设工程设计施工图审核中心网站广告设计软件photoshop
  • ppt 做的最好的网站wordpress怎么显示摘要
  • 申请一个自己的网站51免费模板网
  • 用php做购物网站友情链接检查
  • 麻城建设局网站停办做建材网站
  • 上海技术公司做网站文件上传网站源码
  • 阿里服务器怎么做网站服务器吗如何让自己的网站被百度收录
  • 如何设计网站首页导航微信公众号网页版入口
  • 网站新款模板每平每方设计家官网
  • 做网站论文江门网站建设
  • 小语种网站开发移动ui设计 网站
  • 网站备案变更接入搜索引擎下载
  • 山东莱钢建设有限公司网站做网站用突发性实例可以吗
  • 网页制作与网站建设试卷珠海公司做网站
  • 登陆工伤保险网站 提示未授权 怎么做医院网站方案
  • 湖南省做网站的WordPress和微信小程序
  • 网站源码提取学短视频剪辑与制作
  • 如何在网站网站做代理长沙做网站好的公司