Interface Segregation Principle (ISP) – czyli zasada segregacji interfejsów. Mówi o tym, że:
Wiele dedykowanych interfejsów jest lepsze niż jeden ogólny.
Zasada ISP mówi o tym, żeby tworzyć jak najbardziej uproszczone interfejsy / klasy abstrakcyjne, tak aby klasy, które ich używają wykorzystywały wszystkie ich metody.
Przykład: Na podstawie interfejsu Animal tworzone są poszczególne klasy zwierząt np. Bird i Fish. Jednak nie wszystkie metody z interfejsu Animal mogą być użyte przez te klasy (łamana jest zasada ISP). Dlatego należy podzielić ten interfejs na kilka mniejszych np. Animal, Swimable, Flyable, Runable.
Przed refaktoryzacją:
public interface Animal {
void eat();
void reproduction();
void fly();
void swim();
void run();
}
public class Fish implements Animal{
@Override
public void eat() {
//code...
}
@Override
public void reproduction() {
//code...
}
@Override
public void fly() {}
@Override
public void swim() {
//code...
}
@Override
public void run() {}
}
public class Bird implements Animal{
@Override
public void eat() {
//code...
}
@Override
public void reproduction() {
//code...
}
@Override
public void fly() {
//code...
}
@Override
public void swim() {}
@Override
public void run() {
//code...
}
}
Po refaktoryzacji:
public interface Animal {
void eat();
void reproduction();
}
public interface Swimable {
void swim();
}
public interface Flyable {
void fly();
}
public interface Runable {
void run();
}
public class Fish implements Animal, Swimable{
@Override
public void eat() {
//code...
}
@Override
public void reproduction() {
//code...
}
@Override
public void swim() {
//code...
}
}
public class Bird implements Animal, Flyable, Runable{
@Override
public void eat() {
//code...
}
@Override
public void reproduction() {
//code...
}
@Override
public void fly() {
//code...
}
@Override
public void run() {
//code...
}
}