Ответ
В объектно-ориентированном программировании интерфейс — это контракт, который определяет набор методов (сигнатуры) без их реализации. Класс, реализующий интерфейс, обязан предоставить конкретную реализацию всех его методов.
В Dart, где нет ключевого слова interface, эту роль выполняют абстрактные классы (содержащие хотя бы один абстрактный метод) или обычные классы. Ключевое слово implements используется для реализации интерфейса.
Пример в Dart:
// Абстрактный класс действует как интерфейс
abstract class CacheService {
Future<String> get(String key);
Future<void> set(String key, String value);
Future<void> clear();
}
// Класс реализует интерфейс
class SharedPreferencesCache implements CacheService {
@override
Future<String> get(String key) async {
// Реализация получения данных из SharedPreferences
final prefs = await SharedPreferences.getInstance();
return prefs.getString(key) ?? '';
}
@override
Future<void> set(String key, String value) async {
// Реализация сохранения
final prefs = await SharedPreferences.getInstance();
await prefs.setString(key, value);
}
@override
Future<void> clear() async {
final prefs = await SharedPreferences.getInstance();
await prefs.clear();
}
}
Преимущества использования интерфейсов в Flutter/Dart:
- Слабая связность: Код зависит от абстракции (интерфейса), а не от конкретной реализации. Это упрощает замену одной реализации на другую (например, замена кэша в памяти на кэш на диске).
- Тестируемость: Легко создавать моки (mock) или заглушки (stub) для интерфейсов при модульном тестировании.
- Полиморфизм: Можно работать с разными реализациями через общий интерфейс.
- Четкий контракт: Явно определяет, что должен уметь делать класс.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶