Back to questions
Junior — Middle
90
Можешь привести примеры шаблонов проектирования, реализованных с помощью интерфейсов?
Answer from AI
sobes.tech AI
В Go интерфейсы широко используются для реализации различных шаблонов проектирования. Вот несколько примеров:
-
Стратегия (Strategy)
- Интерфейс определяет набор методов, а разные структуры реализуют разные алгоритмы.
- Пример: интерфейс
Sorterс методомSort(), разные реализации для разных алгоритмов сортировки.
-
Декоратор (Decorator)
- Интерфейс реализуется базовым объектом и обертками, которые добавляют функциональность.
- Пример: интерфейс
Readerиз пакетаio, оберткиbufio.Reader,gzip.Readerи т.д.
-
Фабричный метод (Factory Method)
- Интерфейс описывает продукт, а фабричные функции возвращают разные реализации.
-
Наблюдатель (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 позволяют гибко реализовывать различные паттерны, обеспечивая слабую связанность и расширяемость кода.