Извлечение интерфейса (Extract Interface)
Несколько клиентов используют одно подмножество методов класса, либо несколько классов имеют одинаковое подмножество методов.
Вынести это подмножество в отдельный интерфейс.
Отдельные интерфейсы используются в JAVA, где они заменяют множественное наследование. При отдельной реализации описывается только спецификация интерфейсов, так что для каждого применения интерфейса нужно заново писать код, что может привести к его дублированию. Взамен можно использовать Извлечение класса либо Извлечение суперкласса.
Этот же рефакторинг используется, когда класс играет различные роли в различных ситуациях – тогда каждый интерфейс описывает отдельную роль класса. Либо когда некоторую часть операций для класса выполняет сервер – тогда, если выделить эти операции в отдельный интерфейс, можно будет подключать другие сервера, где останется только реализацию соответствующего интерфейса.
Комментарии