Zasada segregacji interfejsów (ang. ISP – interface segretation principle) mówi w skrócie, wiele dedykowanych interfejsów jest lepsze, niż jeden ogólny. Interfejsy powinny być dopasowane do użytkownika.
Innymi słowy klasa nie powinna być zmuszona implementować interfejsów, które nie będą wykorzystywane przez tę klasę.
Przykład programu przed zastosowaniem zasady ISP:
// Interfejs zawierający wiele metod
interface Worker {
void work();
void eat();
void sleep();
}
// Klasa Robot implementująca interfejs Worker
class Robot implements Worker {
public void work() {
System.out.println("Robot is working");
}
public void eat() {
// Robot nie potrzebuje metody eat, ale musi ją zaimplementować
System.out.println("Robot is eating");
}
public void sleep() {
// Robot nie potrzebuje metody sleep, ale musi ją zaimplementować
System.out.println("Robot is sleeping");
}
}
W tym przykładzie klasa Robot implementuje interfejs Worker, który zawiera wiele metod. Jednakże robot nie potrzebuje metod eat i sleep, co prowadzi do niepotrzebnej implementacji tych metod w klasie Robot.
Przykład programu po zastosowaniu zasady ISP:
// Interfejsy segregowane, każdy zawiera jedną metodę związana z konkretną funkcjonalnością
interface Workable {
void work();
}
interface Eatable {
void eat();
}
interface Sleepable {
void sleep();
}
// Klasa Robot implementująca tylko niezbędne interfejsy
class Robot implements Workable {
public void work() {
System.out.println("Robot is working");
}
}
W tym przykładzie interfejs Worker został podzielony na trzy bardziej specyficzne interfejsy: Workable, Eatable i Sleepable. Klasa Robot implementuje tylko interfejs Workable, który zawiera jedną metodę związana z pracą robota. Dzięki temu, klasa Robot nie jest zmuszona implementować niepotrzebnych metod, co zapewnia zgodność z zasadą Interface Segregation Principle.
