Poiché il principio di segregazione dell'interfaccia suggerisce che nessun client dovrebbe essere costretto a dipendere da metodi che non utilizza, quindi un client non dovrebbe implementare un metodo vuoto per i suoi metodi di interfaccia, altrimenti questo metodo di interfaccia dovrebbe essere inserito in un'altra interfaccia.
E i metodi concreti? Devo separare i metodi che non tutti i client utilizzerebbero? Considera la seguente classe:
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;
}
}
al codice sopra, CarShop non utilizza affatto il metodo isQualityPass () in Car, se dovessi separare isQualityPass () in una nuova classe:
public class CheckCarQualityPass{
public boolean isQualityPass(Car car){
}
}
al fine di ridurre l'accoppiamento di CarShop? Perché una volta penso che isQualityPass () abbia bisogno di ulteriore dipendenza, ad esempio:
public boolean isQualityPass(){
HttpClient client=...
}
CarShop dipenderebbe da HttpClient anche se non utilizza mai HttpClient in realtà. Quindi la mia domanda è: secondo il principio di segregazione dell'interfaccia, dovrei separare i metodi concreti che non tutti i client utilizzerebbero, in modo che tali metodi dipendono dal client solo quando il client effettivamente utilizza, al fine di ridurre l'accoppiamento?
Car
classe di cui non vuoi che tutti gli utenti siano a conoscenza, crea (più di una) interfaccia che la Car
classe implementa e che dichiari utili solo i metodi nel contesto delle interfacce.