设计模式真的很重要吗?听听MyBatis怎么说
关于设计模式的个人看法
设计模式,类似于八股文,在国内编程界很吃香,因为中国是个考试大国。
的确,有的模式很重要,但是大多数都是花架子。四个人提出的设计模式,总得有点分量吧,总得凑个数吧,否则功劳就不好分摊。四个大老爷们,搞个芝麻点的功劳,怎么也说不过去吧。
就拿大名鼎鼎的MyBatis来说,只使用了其中的9个,而总共有26个设计模式,占比不过为三分之一。可见,花架子还是挺多的。当然,模式嘛,本来就是花哨的架子,没有模式一样能实现功能,只不过看起来不花哨而已。
谈谈MyBatis所使用的设计模式:
MyBatis源码中使用了9种设计模式,如下所示:
(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;
不是还有命令模式嘛