четверг, 17 октября 2019 г.

Паттерны в Golang: Decorator

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

Декораторы предоставляют гибкий метод для расширения функциональности объектов.

Реализация

LogDecorate декорирует функцию с сигнатурой func(int) int, которая манипулирует целыми числами и добавляет функиональность логирования ввода/вывода.

type Object func(int) int

func LogDecorate(fn Object) Object {
  return func(n int) int {
    log.Println("Начало исполнения с целым числом", n)

    result := fn(n)

    log.Println("Исполнение завершено с результатом", result)

    return result
  }
}

Использование

func Double(n int) int {
    return n * 2
}

f := LogDecorate(Double)

f(5)
// Начало исполнения с целым числом 5
// Исполнение завершено с результатом 10

Запустить пример в песочнице play.golang.org

Примечание. Декораторы не должны изменять интерфейс объекта.


Читайте также:


Комментариев нет:

Отправить комментарий