利用“工厂模式+反射+配置文件”来实现解耦和
来源:互联网 发布:JavaScript target 编辑:程序博客网 时间:2024/05/16 05:25
我们在利用java的三层架构开发时,如果用Web层直接创建service层,然后再用service层直接创建dao层 ,这样的话如果我们底层的实现类发生了变化,我们就要去修改源代码了,这很显然不是很符合开发的要求。那这个问题应该怎么解决呢?对,我们可以通过利用“工厂模式+反射+配置文件”的模式来降低耦合度,从而只是通过修改配置文件就能实现我们的需求。
下面我们先通过案例的形式来分析一下传统模式、工厂模式的不足。
在此我们先规定几个类,就不在下面一一写了,各位看客要根据这几个类去看后面的内容奥。
Dao层的接口 USerDao Dao层的实现类UserDaoImp
BeanFactory类为工厂类
传统方式:
//创建dao层的实现类对象
UserDao userDao = new UserDaoImp;
对于传统方式如果实现类对象由于需求改变导致发生变化,我们就需要将原有的实现类对象都改变为新的实现类对象,这显然不符合我们的OCP原则,而且需要修改的地方如果非常多的话,那这样的工作量也是非常的大的。
(OCP原则解释:对程序扩展是开放的,对修改代码是关闭的。)
工厂模式:
我们在接口和实现类之间通过一个工厂类(BeanFactory)来降低耦合从而见少我们修改代码的工作量。如图:
这样我们需求发生改变时导致实现类发生改变时,我们就只需要修改工厂类中的实现类对象了,但是这样还是需要去修改源码,容错率还是比较高的,怎么样可以不修改源码呢?
工厂模式+反射+配置文件的方式完成程序解耦和:
这里我们需要用到dom4j去解析xml文件所以需要导两个jar包:
xml文件的文件名为applicationContext.xml
Xml文件名为中的内容如下:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?><beans><bean id="UserDao" class="store.dao.impl.UserDaoImpl"></bean><bean id="ProductDao" class="store.dao.impl.ProductDaoImpl"></bean><bean id="OrderDao" class="store.dao.impl.OrderDaoImpl"></bean></beans></span>
BeanFactory类中的代码:
<span style="font-family:KaiTi_GB2312;font-size:18px;">import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class BeanFactory {//将父接口作为id作为参数传递过来,来实现调用不同的实现类public static Object getBean(String id){try {//创建SAXReader对象来读取配置文件SAXReader reader = new SAXReader();//读取配置文件的内容,获得Document对象Document document = reader.read(BeanFactory.class.getClassLoader().getResourceAsStream("applicationContext.xml"));//利用XPath来读取到class元素Element beanElement = (Element)document.selectSingleNode("//bean[@id='"+id+"']");//获取到class后的路径String value = beanElement.attributeValue("class");System.out.println(value);//利用反射获得实现类对象Class clazz = Class.forName(value);return clazz.newInstance();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}</span>我们通过这种形式就不用修改源代码了,而是可以通过修改配置文件中的标签<bean></bean>中的内容来实现我们的需求了从而降低了容错率。
- 利用“工厂模式+反射+配置文件”来实现解耦和
- 利用反射实现工厂模式.
- C++利用反射和简单工厂模式实现业务模块解耦
- C++利用反射和简单工厂模式实现业务模块解耦
- C++利用反射和简单工厂模式实现业务模块解耦
- 在C++中利用反射和简单工厂模式实现业务模块解耦
- 利用反射和工厂模式实现控制反转
- 利用反射机制实现工厂模式
- 抽象工厂模式+反射+配置文件
- 工厂模式+配置文件+反射 实现数据库访问程序
- Java设计模式之工厂模式(利用反射实现)
- 利用反射增强工厂模式
- javaweb项目中利用反射实现工厂模式
- 浅析反射、工厂和配置文件
- 如何使用反射和抽象工厂模式来写JDBC
- 设计模式---抽象工厂模式+反射+配置文件
- 利用反射实现工厂方法
- 利用工厂设计模式实现业务层和dao层的解耦
- 返回到指定界面
- js将yyyymmddhhmmss字符转换为Date
- HTML公共属性
- IOS中的一些细节
- Git SSH Key 生成步骤
- 利用“工厂模式+反射+配置文件”来实现解耦和
- iOS强制退出APP并添加比较友善的动画
- c/c++ MAP遇到的两个问题及解决办法
- 用CSS制作出绚丽燃烧的火狐狸
- kafka常用操作
- 日期Date和String/Long之间的转换
- quick-cocos2dx 继承坑
- AMH面板手工编译升级PHP5.6.9环境以及常见问题解决
- iOS中的传感器---摇一摇, 计步器,距离感应,陀螺仪