Ponieważ zasada segregacji interfejsów sugeruje, że żaden klient nie powinien być zmuszany do polegania na metodach, których nie używa, więc klient nie powinien implementować pustej metody dla swoich metod interfejsu, w przeciwnym razie ta metoda interfejsu powinna zostać umieszczona w innym interfejsie.
A co z konkretnymi metodami? Czy powinienem oddzielić metody, których nie używałby każdy klient? Rozważ następującą klasę:
public class Car{
....
public boolean isQualityPass(){
...
}
public int getTax(){
...
}
public int getCost(){
...
}
}
public class CarShop{
...
public int getCarPrice(int carId){
Car car=carList[carId];
int price=car.getTax() + car.getCost()... (some formula);
return price;
}
}
w powyższym kodzie CarShop w ogóle nie używa metody isQualityPass () w Car, czy powinienem oddzielić isQualityPass () do nowej klasy:
public class CheckCarQualityPass{
public boolean isQualityPass(Car car){
}
}
w celu zmniejszenia sprzężenia CarShop? Ponieważ raz myślę, że isQualityPass () potrzebuje dodatkowej zależności, np .:
public boolean isQualityPass(){
HttpClient client=...
}
CarShop zależałby od HttpClient, nawet tak naprawdę nigdy nie używa HttpClient. Więc moje pytanie brzmi: zgodnie z zasadą segregacji interfejsów, czy powinienem oddzielić konkretne metody, których nie używałby każdy klient, aby metody te zależały od klienta tylko wtedy, gdy klient faktycznie korzysta, aby zmniejszyć sprzężenie?
Carklasie metodę , o której nie chcą (wszyscy) użytkownicy wiedzieć, to stwórz (więcej niż jeden) interfejs, który Carimplementuje klasa, która deklaruje tylko metody przydatne w kontekście interfejsów.