ISP - Interface Segregation Principle

Интерфейсна сегрегация означава, че по-големите интерфейси трябва да бъдат разделени на по-малки. Като правим това, можем да гарантираме, че класовете по изпълнение трябва само да бъдат загрижени за методите, които представляват интерес за тях.

За този пример ще работим заграждение за мечки в зоопарк.

Нека започнем с интерфейс, който дефинира поведението на пазителите на мечки:

public interface BearKeeper {
    void washTheBear();
    void feedTheBear();
    void petTheBear();
}

Тук в примера методите за хранене на мечка, чистене и милване на домашна мечка са на едно и също място, но милването на възрастна мечка може да не е толкова риятно. И по този начин интерфейсът ни представя много отговорности, това означава че интерфейсът е твърде голям.

Нека оправим това, като разделим големия си интерфейс на три отделни:

public interface BearCleaner {
    void washTheBear();
}

public interface BearFeeder {
    void feedTheBear();
}

public interface BearPetter {
    void petTheBear();
}

Сега, благодарение на интерфейсната сегрегация, ние сме свободни да внедрим само методите, които са важни за нас:

public class BearCarer implements BearCleaner, BearFeeder {

    public void washTheBear() {
        //I think we missed a spot...
    }

    public void feedTheBear() {
        //Tuna Tuesdays...
    }
}

И накрая, можем да оставим опасните неща на безразсъдните хора:

public class CrazyPerson implements BearPetter {

    public void petTheBear() {
        //Good luck with that!
    }
}

Last updated