Структурный паттерн 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
Примечание. Декораторы не должны изменять интерфейс объекта.
Читайте также:
- Паттерны в Golang: Observer (Наблюдатель)
- Паттерны в Golang: Builder (Строитель)
- Паттерны в Golang: Factory Method (Фабричный метод)
Комментариев нет:
Отправить комментарий