Ответ
Интерфейс — это формальный контракт или абстрактный тип, который определяет что должен делать класс (список методов, свойств, событий), но не определяет как (их реализацию). Классы, реализующие интерфейс, обязаны предоставить конкретную реализацию всех его членов.
Ключевая цель: Декомпозиция системы, достижение слабой связанности (loose coupling) и полиморфизма.
Пример в C#:
// Контракт для логирования
public interface ILogger
{
void Log(string message, LogLevel level);
bool IsEnabled(LogLevel level);
}
// Конкретная реализация для консоли
public class ConsoleLogger : ILogger
{
public void Log(string message, LogLevel level)
{
if (IsEnabled(level))
{
Console.WriteLine($"[{level}] {DateTime.UtcNow}: {message}");
}
}
public bool IsEnabled(LogLevel level) => level >= LogLevel.Information;
}
// Конкретная реализация для файла
public class FileLogger : ILogger { /* ... */ }
// Использование через интерфейс (полиморфизм)
public class OrderProcessor
{
private readonly ILogger _logger;
// Внедрение зависимости через интерфейс
public OrderProcessor(ILogger logger) => _logger = logger;
public void ProcessOrder()
{
_logger.Log("Начало обработки заказа", LogLevel.Information);
// ... логика
}
}
Преимущества:
- Полиморфизм: Код
OrderProcessorработает с любымILogger. - Тестируемость: Легко подменить реальный логгер на мок (mock) в юнит-тестах.
- Множественное наследование: Класс может реализовать несколько интерфейсов (
class MyClass : ILogger, IDisposable). - Разделение ответственности: Четкое определение ролей в архитектуре.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶