Seperti prinsip pemisahan antarmuka menyarankan tidak ada klien harus dipaksa untuk bergantung pada metode yang tidak digunakan, sehingga klien tidak boleh menerapkan metode kosong untuk metode antarmuka, jika tidak metode antarmuka ini harus dimasukkan ke antarmuka lain.
Tetapi bagaimana dengan metode konkret? Haruskah saya memisahkan metode yang tidak akan digunakan oleh setiap klien? Pertimbangkan kelas berikut:
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;
}
}
pada kode di atas, CarShop tidak menggunakan metode isQualityPass () di Car sama sekali, haruskah saya memisahkan isQualityPass () ke dalam kelas baru:
public class CheckCarQualityPass{
public boolean isQualityPass(Car car){
}
}
untuk mengurangi kopling CarShop? Karena saya pikir sekali jika isQualityPass () membutuhkan dependensi tambahan, misalnya:
public boolean isQualityPass(){
HttpClient client=...
}
CarShop akan bergantung pada HttpClient bahkan tidak pernah menggunakan HttpClient sebenarnya. Jadi pertanyaan saya adalah: sesuai dengan prinsip antarmuka-pemisahan, haruskah saya memisahkan metode konkret yang tidak akan digunakan oleh setiap klien, sehingga metode-metode tersebut bergantung pada klien hanya ketika klien benar-benar menggunakan, untuk mengurangi sambungan?
Car
kelas Anda yang tidak Anda inginkan (semua) diketahui oleh pengguna, maka buat (lebih dari satu) antarmuka yang Car
diimplementasikan oleh kelas yang hanya menyatakan metode yang berguna dalam konteks antarmuka.