【摘? 要】對象之間的耦合度就是對象之間的依賴性。對象之間的耦合度越高,表明對象獨立性越差,維護成本就越高。因此在面向?qū)ο蟮能浖_發(fā)中應盡量降低對象的耦合度,即解耦。在Java中可以使用接口、工廠模式、Spring框架等來降低對象間的耦合度。
【關(guān)鍵詞】耦合;解耦;工廠模式;Spring框架
一、Java對象的耦合性
對象的耦合性即對象的依賴性。在一個對象的工作過程中,需要使用另一個對象,則稱之為依賴另一個對象。使用傳統(tǒng)的new關(guān)鍵字創(chuàng)建對象會造成對象之間較高的依賴性。例如:
public class UserJDBCDao{
public void login(){……}
}
public class UserLoginServlet{
public UserJDBCDao? userDao=new UserJDBCDao();
public void doPost(){
userDao.login();
}
}
在以上代碼中,UserLoginServlet依賴于UserJDBCDao,如果UserJDBCDao使用的技術(shù)需要更換,則可能創(chuàng)建新的UserMyBatisDao來替換原有的UserJDBCDao,則以上代碼中UserJDBCDao就需要被替換為UserMyBatisDao。如果項目中有多個Servlet組件都使用了UserJDBCDao,則需要替換多次需要調(diào)整的代碼可能比較多,通常稱之為“耦合度太高”。
二、使用接口解耦
為了降低以上程序的耦合度,可以使用接口技術(shù)。即創(chuàng)建如下接口:
public interface UserDao{
void login();
}
然后,使得UserJDBCDao和UserMyBatisDao兩個類都實現(xiàn)以上接口,則后續(xù)需要使用Dao對象時,可以聲明為:
public userDao=new UserJDBCDao();
則后續(xù)需要替換時,該對象的聲明語句不用調(diào)整,只替換等號右側(cè)構(gòu)造方法名字即可,一定程度上降低了對象間的耦合度。
三、使用工廠模式解耦
可以使用設(shè)計模式中的工廠模式降低耦合度??梢詣?chuàng)建如下的工廠類:
public class UserDaoFactory{
public static UserDao newInstance(){
return new UserJDBCDao();
}
}
則此前的代碼可以進一步調(diào)整為:
public UserDao userDao=UserDaoFactory.newInstance();
以上代碼中根本就沒有出現(xiàn)某個實現(xiàn)類的名稱,如果需要替換實現(xiàn)類,以上代碼根本就不需要調(diào)整。需要調(diào)整的只有工廠類中的方法的返回值,而工廠類的修改只需要一次即可??梢苑Q之為“UserLoginServlet不依賴于UserJdbcDao或UserMyBatisDao”,也就解除了三者之間的耦合。
四、使用Spring框架解耦
可以將Spring框架理解為一個大型工廠,專門用于創(chuàng)建和管理項目中所需要的類的對象。當需要使用某個對象時,從Spring框架中獲取即可。使用Spring的關(guān)鍵步驟有三步:
(一)導包
在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
假設(shè)需要通過Spring創(chuàng)建Date類的對象,則在Spring配置文件(默認文件名是applicationContext.xml)中添加如下配置:
<bean id="date" class="java.util.Date"></bean>
其中:
1.bean元素:使用該元素描述需要Spring容器管理的對象。
2.id屬性:給被管理的對象起個名字,后續(xù)可使用getBean("id值")獲取該對象。
3.class屬性:被管理對象的完整類名。
(三)通過Spring獲取對象
1.加載Spring配置文件,獲得Spring容器
ClassPathXmlApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
2.從spring容器中獲取對象
Date date=(Date)ac.getBean("date");
“高內(nèi)聚、低耦合”是每個程序員追求的目標,隨著編程技術(shù)的發(fā)展,必將有更多更好的方法來降低程序耦合性,程序解耦方法的研究還需要不斷深入。
參考文獻:
[1]肖睿,肖靜,董寧.SSM輕量級框架應用實戰(zhàn)[M].北京:人民郵電出版社,2018.
[2]CSDN博客.程序的耦合和解耦思路 [EB/OL].https://blog.csdn.net/qq_40867650/article/details/102825262,2019-10-30.
作者簡介:
劉翠霞,女,中共黨員,信息學院軟件教研室主任,高級工程師,工程碩士。研究方向:高職教育,軟件開發(fā)。在研課題《“互聯(lián)網(wǎng)+”背景下高職課堂革命的探究與實踐》。
(作者單位:石家莊財經(jīng)職業(yè)學院)