介面定義(IXxx,介面前加I
用來區分)
IXxxService
IXxxDao
實現類的定義(XxxImpl,名稱後面加Impl
用來區分,放到對應的impl
包中)
XxxServiceImpl
XxxDaoImpl
判斷類之間的耦合關係:最簡單的辦法,就是註釋/刪除法,將這個類中呼叫的另一個類,全部註釋掉,看看錯誤處有多少。
假設有以下類關係
public interface IPersonService{}//service介面
public class PersonServiceImpl implements IPersonService{} //service介面的實現類
public class PersonController{} //controller呼叫service
public class PersonController {
//直接呼叫介面的實現類
PersonServiceImpl personService= new PersonServiceImpl();
public int findPersonByName(Person person){
return personService.findPersonByName(person);
}
}
檢視耦合情況,我們將PersonServiceImpl
類註釋掉,僅僅只是這幾行程式碼,耦合度就高達三處,肯定是不行的。
IPersonService
來宣告物件,實現等號左邊解耦public class PersonController {
//通過呼叫介面來實現等號左邊解耦
IPersonService personService= new PersonServiceImpl();
public int findPersonByName(Person person) throws InterruptedException {
return personService.findPersonByName(person);
}
}
我們再來通過註釋PersonServiceImpl
來檢視耦合情況,這時候就只有一個耦合了(等號右邊耦合)
public class PersonController {
//通過@Autowired自動裝載,它會從容器中找對應型別的bean將其注入賦值給personService
@Autowired
IPersonService personService;
//就相當於執行了 IPersonService personService= new PersonServiceImpl();
public int findPersonByName(Person person) throws InterruptedException {
return personService.findPersonByName(person);
}
}
繼續通過註釋PersonServiceImpl
來檢視是否有耦合情況,沒有任何報錯,所以沒有兩個類之間沒有耦合了,當前PersonController和PersonService沒有耦合了。