---
title: "Извлечение интерфейса"
type: "refactoring-technique"
slug: "extract-interface"
url: "http://localhost:3000/ru/extract-interface.md"
category: "Решение задач обобщения"
description: "Проблема: Несколько клиентов пользуются одной и той же частью интерфейса класса. Либо в двух классах часть интерфейса оказалась общей. Решение: Выделите эту общую часть в свой собственный интерфейс."
---
# Извлечение интерфейса

> Проблема: Несколько клиентов пользуются одной и той же частью интерфейса класса. Либо в двух классах часть интерфейса оказалась общей. Решение: Выделите эту общую часть в свой собственный интерфейс.

## Problem

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

## Solution

Выделите эту общую часть в свой собственный интерфейс.

## Why Refactor

1. Интерфейсы бывают кстати, когда один и тот же класс может отыгрывать различные роли в различных ситуациях. Используйте [извлечение интерфейса](/ru/extract-interface), чтобы явно обозначить каждую из ролей.
2. Ещё один удобный случай возникает, когда требуется описать операции, которые класс выполняет на своём сервере. Если в будущем предполагается разрешить использование серверов нескольких видов, все они должны реализовывать этот интерфейс.

## How to Refactor

1. Создайте пустой интерфейс.
2. Объявите общие операции в интерфейсе.
3. Объявите нужные классы как реализующие этот интерфейс.
4. Измените объявление типов в клиентском коде так, чтобы они использовали новый интерфейс.
## Relations

**Similar techniques**

- [Извлечение суперкласса](/ru/extract-superclass.md)

