设计模式与代码的结构特性
---
>我的CSDN:https://blog.csdn.net/P71720/article/details/103443116
># 工厂模式
> 什么是工厂模式?简单的说就是,就是生产对象的一种方式。
>在看到本次高软作业的时候,大脑突然就想到了Mybatis的工厂模式和代理模式,正好选用Mybatis的工厂模式来举例说明工厂模式的优势和特性。
># 工厂模式的优势
> 个人体会工厂模式的优势在于:
>1.封装了很多细节,使开发者可以将更多的经历投入到事务的实现上。
>2.降低了类之间的依赖,即解耦。
>3.扩展起来也是更加方便。
>那么,下面就根据Mybatis代码来分析上面的优势。
># 代码分析
>![在这里插入图片描述](https://img-blog.csdnimg.cn/20191208101345664.png#pic_center )
> Mybatis在读取完配置文件后,要创建SqlSessionFactory,即SqlSession工厂,通过工厂生产一个SqlSession对象,然后使用SqlSession创建Dao接口的代理对象(这里用了代理模式,此处暂不介绍)。
> 那么什么是SqlSessionFactory呢?让我们点进去康康,发现:
>![在这里插入图片描述](https://img-blog.csdnimg.cn/20191208101515458.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1A3MTcyMA==,size_16,color_FFFFFF,t_70#pic_center)
> 可以看到,就是个接口,里面对应不同的传参构建了不同的参数,我们上面调用里面的函数大概就是:
>![在这里插入图片描述](https://img-blog.csdnimg.cn/2019120810265583.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1A3MTcyMA==,size_16,color_FFFFFF,t_70#pic_center)
> 这样,当我们需要实现不同的实体类并实现各种各样的方法时就不会凌乱的放在dao包中了,而是统一的利用工厂生成SqlSession创建实体类的代理对象从而调用SelectList方法,有效的降低了类之间的耦合度。
>可能只有一个findAll方法看的不明显,那就多写几个。
>![在这里插入图片描述](https://img-blog.csdnimg.cn/20191208103619919.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1A3MTcyMA==,size_16,color_FFFFFF,t_70#pic_center)
>将这些全都封装起来~
>![在这里插入图片描述](https://img-blog.csdnimg.cn/20191208103833965.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1A3MTcyMA==,size_16,color_FFFFFF,t_70#pic_center)
>剩下来的实现就很容易实现了,是不是很方便。
>我将我编写的一些跟本次作业有关的代码上传到了我的Github上,可以康康,谢谢~:
>https://github.com/PXCC/Mybatis_Demos.git