1. Decorator Pattern

Decorator structural pattern allows extending the function of an existing object dynamically without altering its internals.

Decorators provide a flexible method to extend functionality of objects.

1.1. Implementation

LogDecorate decorates a function with the signature func(int) int that manipulates integers and adds input/output logging capabilities.

type Object func(int) int

func LogDecorate(fn Object) Object {
    return func(n int) int {
        log.Println("Starting the execution with the integer", n)

        result := fn(n)

        log.Println("Execution is completed with the result", result)

        return result
    }
}

1.2. Usage

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

f := LogDecorate(Double)

f(5)
// Starting execution with the integer 5
// Execution is completed with the result 10

1.3. Rules of Thumb

  • Unlike Adapter pattern, the object to be decorated is obtained by injection.
  • Decorators should not alter the interface of an object.
Copyright © studygolang.com 2013 all right reserved,powered by Gitbook该文件修订时间: 2017-07-21 20:12:31

results matching ""

    No results matching ""