Оскільки принцип сегрегації інтерфейсів передбачає, що жоден клієнт не повинен бути змушений залежати від методів, які він не використовує, тому клієнт не повинен впроваджувати порожній метод для своїх методів інтерфейсу, інакше цей метод інтерфейсу повинен бути переведений в інший інтерфейс.
Але як щодо конкретних методів? Чи слід відокремлювати методи, якими користувався би не кожен клієнт? Розглянемо наступний клас:
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 () в автомобілі, чи слід розділяти isQualityPass () на новий клас:
public class CheckCarQualityPass{
public boolean isQualityPass(Car car){
}
}
щоб зменшити зв’язок CarShop? Тому що я думаю, що один раз, якщо isQualityPass () потребує додаткової залежності, наприклад:
public boolean isQualityPass(){
HttpClient client=...
}
CarShop залежатиме від HttpClient, навіть він ніколи фактично не використовує HttpClient. Отож, моє запитання: за принципом розбиття інтерфейсу, чи слід відокремлювати конкретні методи, якими користуються не всі клієнти, щоб ці методи залежали від клієнта лише тоді, коли клієнт насправді використовує, щоб зменшити зв'язок?
Car
класі є метод, про який ви не хочете (усі) користувачів знати, тоді створіть (більше одного) інтерфейс, який Car
клас реалізує, який оголошує лише методи корисними у контексті інтерфейсів.