S.O.L.I.D. 4 – Interface Segregation Principle (ISP)

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...
    }
}

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *