面向接口编程在Java web 三层架构的应用与使用工厂模式解决问题
为什么要面向接口编程:
在应用中,我们一般都是面向接口编程的,这样有利于系统的扩展与移植。就像Java Web中的三层架构:展现层、业务逻辑层、数据持久层一样,上层都是调用下层的接口。因为一旦下层实现改变:比如持久层从数据库操作更换为文件操作,上层因为调用下层的接口而不用更改任何代码,利于系统扩展与移植。
面向接口编程的思路要点:
举一个例子,现在要添加一个用户,数据持久层接口如下所示:
而其两个实现分别如下:
一、数据库实现代码:
二、文件实现类代码如下:
这样业务逻辑层代码如下所示:
面向接口编程的问题:
这样如果要使得用户保存从数据库更换为文件,就要修改构造方法中的userInfoDao = new UserInfoDao4SQL();这一行代码,这样就有不符合修改扩展的原则,因为一旦要更改实现,就要更改代码。
面向接口编程问题的解决思路:
具体的做法是将要更改的代码提取到配置文件里,就如同数据库的配置文件,这样就可以直接修改配置文件,而不用修改代码了。这里我们介绍一种方法,叫做工厂模式方法,代码如下:
配置文件InterfaceFactory.xml代码如下:
类InterfaceFactory采用dom4j来解析xml文件,然后在getBean()方法中使用反射机制Class.getName()来生成要采用的接口实现类。并且将实现类放在Map中,这样以后要用到就直接从map中取,提高了效率。配置文件采用了数据库实现,如果要采用文件实现则将配置文件转换为:
这样业务逻辑层的代码修改为如下,这样以后就可以不用修改代码写该配置文件即可完成: