Поскольку принцип сегрегации интерфейса предполагает, что ни одного клиента не следует заставлять зависеть от методов, которые он не использует, поэтому клиент не должен реализовывать пустой метод для своих методов интерфейса, в противном случае этот метод интерфейса должен быть помещен в другой интерфейс.
Но как насчет конкретных методов? Должен ли я разделить методы, которые не каждый клиент будет использовать? Рассмотрим следующий класс:
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;
}
}
в приведенном выше коде CarShop вообще не использует метод isQualityPass () в Car, если я должен разделить isQualityPass () на новый класс:
public class CheckCarQualityPass{
public boolean isQualityPass(Car car){
}
}
чтобы уменьшить сцепление CarShop? Потому что я думаю, что если isQualityPass () нужна дополнительная зависимость, например:
public boolean isQualityPass(){
HttpClient client=...
}
CarShop будет зависеть от HttpClient, даже если на самом деле он никогда не использует HttpClient. Итак, мой вопрос: в соответствии с принципом сегрегации интерфейса, я должен отделить конкретные методы, которые будут использовать не все клиенты, чтобы эти методы зависели от клиента только тогда, когда клиент фактически использует, чтобы уменьшить связь?
Car
классе, о котором вы не хотите, чтобы (все) пользователи знали, тогда создайте (более одного) интерфейс, который Car
класс реализует, который объявляет только методы, полезные в контексте интерфейсов.