一、传统方式的开放
比如定义一个接口的实现类:
UserService us = new UserService();
该方式没有体现面向接口编程的思想。
二、面向接口编程
UserService us = new UserServiceImpl();
在web层中创建service层(业务层)的实现类,使得web层与service层产生了耦合;
并没有遵守ocp原则
OCP原则
即open-close原则:对程序的扩展是open的,对修改程序代码是close的。
尽量做到不修改程序的源码,实现对程序的扩展。
三、工厂模式
创建一个工厂类,通过工厂类来创建service接口的实现对象。
class FactoryBean{
public static UserService getUs(){
return new UserServiceImpl();
}
.......
}
但是如果实现类发现变化,还是需要修改FactoryBean类中的代码,由此可见还是存在耦合,该方案仍然存在不足;
四、工厂+反射+配置文件
(1)先在配置文件中配置一个bean,如<bean. id=“us” class=“com.service.impl.UserServiceImpl”>
(2)通过向工厂类方法中传入id值,解析XML文件,通过id找到对应的bean
class FactoryBean{
public static Object getBean(String id){
...
反射
}
}
再通过class名,利用Java的反射机制生成对应的class类,从而完成解耦。
#撕破伤口丶#