Также известен как Extract Interface

Рефакторинг Извлечение интерфейса

Проблема

Несколько клиентов пользуются одной и той же частью интерфейса класса. Либо в двух классах часть интерфейса оказалась общей.

Решение

Выделите эту общую часть в свой собственный интерфейс.
До
Extract Interface - Before
После
Extract Interface - After

Причины рефакторинга

  1. Интерфейсы бывают кстати, когда один и тот же класс может отыгрывать различные роли в различных ситуациях. Используйте извлечение интерфейса, чтобы явно обозначить каждую из ролей.

  2. Ещё один удобный случай возникает, когда требуется описать операции, которые класс выполняет на своём сервере. Если в будущем предполагается разрешить использование серверов нескольких видов, все они должны реализовывать этот интерфейс.

Полезные факты

Есть некоторое сходство между извлечением суперкласса и извлечением интерфейса.

Извлечение интерфейса позволяет выделять только общие интерфейсы, но не общий код. Другими словами, если в классах находится дублирующий код, то, применив извлечение интерфейса, вы никак не избавитесь от этого дублирования.

Тем не менее, эту проблему можно уменьшить, применив извлечение класса для помещения поведения, содержащего дублирование в отдельный компонент и делегирования ему всей работы. В случае если объем общего поведения окажется довольно большим, всегда можно применить извлечение суперкласса. Конечно, это даже проще, но помните, что при этом вы получаете только один родительский класс.

Порядок рефакторинга

  1. Создайте пустой интерфейс.

  2. Объявите общие операции в интерфейсе.

  3. Объявите нужные классы как реализующие этот интерфейс.

  4. Измените объявление типов в клиентском коде так, чтобы они использовали новый интерфейс.

Устали читать?

Сбегайте за подушкой, у нас тут контента на 7 часов чтения.

Или попробуйте наш новый интерактивный курс по рефакторингу. Он более информативный и гораздо более интересный, чем банальный текст.

Узнать больше...

Живой пример

Первый раз здесь? Ничего страшного!

У нас здесь всё просто – интерактивный пример очень похож на видео (но выглядит гораздо круче).

  1. После начала проигрывания, вам показываются разнообразные подсказки и сообщения. Вы продвигаетесь дальше, кликая на них.
  2. Вы можете перематывать шаги, используя стрелки слева.
  3. Кроме того, вы можете посмотреть разницу между первоначальным и получившимся кодом, нажав кнопку с глазом ().
  4. Кнопка компиляции () позвоялет проверить текущий код на наличие ошибок.