关于设计模式的个人看法

设计模式,类似于八股文,在国内编程界很吃香,因为中国是个考试大国。

的确,有的模式很重要,但是大多数都是花架子。四个人提出的设计模式,总得有点分量吧,总得凑个数吧,否则功劳就不好分摊。四个大老爷们,搞个芝麻点的功劳,怎么也说不过去吧。

就拿大名鼎鼎的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;

标签: none

凡是加入我群者,皆要严守群规,每周六、日是群规反思日。群规的要义有两点:

(1)坚持系统化的学习方式,由量变到质变。仅仅解决工作中的问题,并不叫系统化的学习。

(2)坚持以价值为导向的学习方式,扔掉低价值知识[配置、调参、安装],聚焦高价值知识[结构、算法、优化],推动量变到质变的进程。

添加新评论