使用工厂模式解耦和IoC思想
程序员文章站
2022-05-18 22:37:40
使用工厂模式解耦。 一、需求场景: 某一层功能需要改动,但其他层代码不变 实现类1: 查询自己的数据库. ====改为==== 实现类2: 从其它地址得到数据. 二、步骤: 1.创建一个 类,Bean工厂 2.解决硬编码问题,进一步优化解耦 提供一个配置文件: 内容: 三、理论 1.导入 使用接口开 ......
使用工厂模式解耦。
一、需求场景:
某一层功能需要改动,但其他层代码不变
-
实现类1:
mydaoimpl
查询自己的数据库.====改为====>
实现类2:
mydaoimpl2
从其它地址得到数据.
二、步骤:
1.创建一个beanfactory
类,bean工厂
service层: private mydao dao = beanfactory.getbean(); class beanfactory{ public static object getbean(){ class clazz = class.forname("com.mysite.dao.impl.mydaoimpl");//有硬编码问题 object obj =clazz,newinstance(); return obj; } }
2.解决硬编码问题,进一步优化解耦
提供一个配置文件:
beans.properties
内容:
mydao=com.mysite.dao.impl.mydaoimpl2
//解决硬编码问题,进一步解耦 service层 private mydao dao = beanfactory.getbean("mydao"); class beanfactory{ public static object getbean(string key){ //读取beans.properties文件,得到properties properties; properties properties = beanfactory.class. string clazzname = properties.getproperty(key); class clazz = class.forname(clazzname); object obj = clazz.newinstance(); } }
三、理论
1.导入-----使用接口开发:
- 好处:方便进行功能拓展,提供新的实现类,提供新功能
- 问题:service层里创建dao对象的代码需要随之调整
- 层与层之间耦合性比较强
2.解决思路:
- 在service层创建对象时,使用反射创建对象,
- 提供一个配置文件: key对应
dao的全限定类名
- 想创建什么
dao
,就提供一个key,通过beanfactory
类得到key对应的dao
对象. -
好处:
-
dao
再拓展,又增加了新的实现类.我们只需要修改配置文件即可. - 其它service代码、
beanfactory
代码都不需要变更.
-
- 耦合性降低了
3.工厂模式
spring框架的两大核心
ioc
:inversion of control,控制反转,解耦
- 由原来主动创建对象,变成被动接收对象.把创建对象的控制权交出去了.
aop
: aspect oriented programming,面向切面编程
上一篇: 结构型模式:装饰模式
下一篇: WebStorm出现中文乱码解决代码