Sobes.tech
Назад к вопросам
Junior — Middle
91

Можешь привести примеры шаблонов проектирования, реализованных с помощью интерфейсов?

Ответ от нейросети

sobes.tech AI

В Go интерфейсы широко используются для реализации различных шаблонов проектирования. Вот несколько примеров:

  1. Стратегия (Strategy)

    • Интерфейс определяет набор методов, а разные структуры реализуют разные алгоритмы.
    • Пример: интерфейс Sorter с методом Sort(), разные реализации для разных алгоритмов сортировки.
  2. Декоратор (Decorator)

    • Интерфейс реализуется базовым объектом и обертками, которые добавляют функциональность.
    • Пример: интерфейс Reader из пакета io, обертки bufio.Reader, gzip.Reader и т.д.
  3. Фабричный метод (Factory Method)

    • Интерфейс описывает продукт, а фабричные функции возвращают разные реализации.
  4. Наблюдатель (Observer)\n - Интерфейс для подписчиков, которые реализуют метод обновления, и объект, который уведомляет их.

Пример простого интерфейса и реализации стратегии:

// Интерфейс стратегии
 type PaymentMethod interface {
     Pay(amount float64) error
 }

// Реализация для кредитной карты
 type CreditCard struct {}
 func (c CreditCard) Pay(amount float64) error {
     fmt.Println("Оплата кредитной картой", amount)
     return nil
 }

// Реализация для PayPal
 type PayPal struct {}
 func (p PayPal) Pay(amount float64) error {
     fmt.Println("Оплата через PayPal", amount)
     return nil
 }

// Использование
 func ProcessPayment(p PaymentMethod, amount float64) {
     p.Pay(amount)
 }

Таким образом, интерфейсы в Go позволяют гибко реализовывать различные паттерны, обеспечивая слабую связанность и расширяемость кода.