Mybatis至少遇到了以下的设计模式的使用: 1、Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder; 2、工厂模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory; 3、单例模式,例如ErrorContext和LogFactory; 4、代理模式,Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果; 5、组合模式,例如SqlNode和各个子类ChooseSqlNode等; 6、模板方法模式,例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler; 7、适配器模式,例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现; 8、装饰者模式,例如Cache包中的cache.decorators子包中等各个装饰者的实现; 9、迭代器模式,例如迭代器模式PropertyTokenizer; 10、 MyBatis拦截器使用了责任链模式