Ответ
Полиморфизм — это принцип объектно-ориентированного программирования, позволяющий объектам с разной внутренней реализацией обрабатываться через единый интерфейс. В контексте Node.js и JavaScript/TypeScript это реализуется несколькими способами:
-
Переопределение методов (динамический полиморфизм): Дочерний класс может переопределить метод родительского класса.
class Logger { log(message) { console.log(`[LOG]: ${message}`); } } class FileLogger extends Logger { log(message) { // Переопределение: логирование в файл вместо консоли const fs = require('fs'); fs.appendFileSync('app.log', `${message}n`); } } const logger = new FileLogger(); logger.log('User logged in'); // Вызовется метод FileLogger.log -
Полиморфизм на основе интерфейсов (в TypeScript): Разные классы, реализующие один интерфейс, могут использоваться взаимозаменяемо.
interface DataStorage { save(data: string): void; } class DatabaseStorage implements DataStorage { save(data: string) { // Логика сохранения в БД, например, с использованием Prisma или Mongoose console.log(`Saving to DB: ${data}`); } } class CloudStorage implements DataStorage { save(data: string) { // Логика отправки в облако (AWS S3, Google Cloud Storage) console.log(`Uploading to cloud: ${data}`); } } function processData(storage: DataStorage, data: string) { // Функция работает с любым объектом, реализующим DataStorage storage.save(data); } processData(new DatabaseStorage(), 'record1'); processData(new CloudStorage(), 'record2');
Практическая польза в Node.js: Полиморфизм позволяет создавать гибкие и расширяемые системы, например, подключать разные стратегии кэширования (Redis, Memcached, in-memory), различные провайдеры аутентификации или адаптеры для баз данных через единый контракт, что упрощает тестирование и поддержку.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶