patterns

Паттерны проектирования в современной разработке

Обзор ключевых паттернов проектирования и их применение

#patterns #design #best-practices

Паттерны проектирования в современной разработке

Паттерны проектирования — это проверенные решения типичных проблем, возникающих при разработке программного обеспечения.

Порождающие паттерны

Singleton

Гарантирует, что класс имеет только один экземпляр:

class DatabaseConnection {
  private static instance: DatabaseConnection;
  
  private constructor() {
    // Инициализация соединения
  }
  
  static getInstance(): DatabaseConnection {
    if (!DatabaseConnection.instance) {
      DatabaseConnection.instance = new DatabaseConnection();
    }
    return DatabaseConnection.instance;
  }
}

Factory Method

Определяет интерфейс для создания объектов:

interface Logger {
  log(message: string): void;
}

class ConsoleLogger implements Logger {
  log(message: string) {
    console.log(message);
  }
}

class FileLogger implements Logger {
  log(message: string) {
    // Запись в файл
  }
}

class LoggerFactory {
  createLogger(type: 'console' | 'file'): Logger {
    switch (type) {
      case 'console':
        return new ConsoleLogger();
      case 'file':
        return new FileLogger();
    }
  }
}

Структурные паттерны

Adapter

Позволяет объектам с несовместимыми интерфейсами работать вместе:

// Старый интерфейс
class OldPaymentSystem {
  processPayment(amount: number) {
    console.log(`Processing ${amount} via old system`);
  }
}

// Новый интерфейс
interface NewPaymentSystem {
  pay(amount: number, currency: string): void;
}

// Адаптер
class PaymentAdapter implements NewPaymentSystem {
  constructor(private oldSystem: OldPaymentSystem) {}
  
  pay(amount: number, currency: string) {
    // Конвертация и адаптация
    this.oldSystem.processPayment(amount);
  }
}

Поведенческие паттерны

Observer

Определяет зависимость один-ко-многим между объектами:

interface Observer {
  update(data: any): void;
}

class Subject {
  private observers: Observer[] = [];
  
  attach(observer: Observer) {
    this.observers.push(observer);
  }
  
  notify(data: any) {
    this.observers.forEach(observer => observer.update(data));
  }
}

Применение в современной разработке

Паттерны проектирования остаются актуальными и в современной разработке:

  • React Hooks — реализация паттерна Observer
  • Dependency Injection — паттерн Inversion of Control
  • Middleware — паттерн Chain of Responsibility

Заключение

Знание паттернов проектирования помогает писать более чистый, поддерживаемый и масштабируемый код.