浅谈Java程序中对象解耦的方式
2019-09-10刘翠霞
【摘 要】对象之间的耦合度就是对象之间的依赖性。对象之间的耦合度越高,表明对象独立性越差,维护成本就越高。因此在面向对象的软件开发中应尽量降低对象的耦合度,即解耦。在Java中可以使用接口、工厂模式、Spring框架等来降低对象间的耦合度。
【关键词】耦合;解耦;工厂模式;Spring框架
一、Java对象的耦合性
对象的耦合性即对象的依赖性。在一个对象的工作过程中,需要使用另一个对象,则称之为依赖另一个对象。使用传统的new关键字创建对象会造成对象之间较高的依赖性。例如:
public class UserJDBCDao{
public void login(){……}
}
public class UserLoginServlet{
public UserJDBCDao userDao=new UserJDBCDao();
public void doPost(){
userDao.login();
}
}
在以上代碼中,UserLoginServlet依赖于UserJDBCDao,如果UserJDBCDao使用的技术需要更换,则可能创建新的UserMyBatisDao来替换原有的UserJDBCDao,则以上代码中UserJDBCDao就需要被替换为UserMyBatisDao。如果项目中有多个Servlet组件都使用了UserJDBCDao,则需要替换多次需要调整的代码可能比较多,通常称之为“耦合度太高”。
二、使用接口解耦
为了降低以上程序的耦合度,可以使用接口技术。即创建如下接口:
public interface UserDao{
void login();
}
然后,使得UserJDBCDao和UserMyBatisDao两个类都实现以上接口,则后续需要使用Dao对象时,可以声明为:
public userDao=new UserJDBCDao();
则后续需要替换时,该对象的声明语句不用调整,只替换等号右侧构造方法名字即可,一定程度上降低了对象间的耦合度。
三、使用工厂模式解耦
可以使用设计模式中的工厂模式降低耦合度。可以创建如下的工厂类:
public class UserDaoFactory{
public static UserDao newInstance(){
return new UserJDBCDao();
}
}
则此前的代码可以进一步调整为:
public UserDao userDao=UserDaoFactory.newInstance();
以上代码中根本就没有出现某个实现类的名称,如果需要替换实现类,以上代码根本就不需要调整。需要调整的只有工厂类中的方法的返回值,而工厂类的修改只需要一次即可。可以称之为“UserLoginServlet不依赖于UserJdbcDao或UserMyBatisDao”,也就解除了三者之间的耦合。
四、使用Spring框架解耦
可以将Spring框架理解为一个大型工厂,专门用于创建和管理项目中所需要的类的对象。当需要使用某个对象时,从Spring框架中获取即可。使用Spring的关键步骤有三步:
(一)导包
在pom.xml文件在pom.xml中添加org.springframework的spring-webmvc依赖进行导包。代码如下:
<dependency>
<groupId>org.springframeword</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
(二)配置Spring
假设需要通过Spring创建Date类的对象,则在Spring配置文件(默认文件名是applicationContext.xml)中添加如下配置:
<bean id="date" class="java.util.Date"></bean>
其中:
1.bean元素:使用该元素描述需要Spring容器管理的对象。
2.id属性:给被管理的对象起个名字,后续可使用getBean("id值")获取该对象。
3.class属性:被管理对象的完整类名。
(三)通过Spring获取对象
1.加载Spring配置文件,获得Spring容器
ClassPathXmlApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
2.从spring容器中获取对象
Date date=(Date)ac.getBean("date");
“高内聚、低耦合”是每个程序员追求的目标,随着编程技术的发展,必将有更多更好的方法来降低程序耦合性,程序解耦方法的研究还需要不断深入。
参考文献:
[1]肖睿,肖静,董宁.SSM轻量级框架应用实战[M].北京:人民邮电出版社,2018.
[2]CSDN博客.程序的耦合和解耦思路 [EB/OL].https://blog.csdn.net/qq_40867650/article/details/102825262,2019-10-30.
作者简介:
刘翠霞,女,中共党员,信息学院软件教研室主任,高级工程师,工程硕士。研究方向:高职教育,软件开发。在研课题《“互联网+”背景下高职课堂革命的探究与实践》。
(作者单位:石家庄财经职业学院)