behavioral/strategy.md
Strategy behavioral design pattern enables an algorithm's behavior to be selected at runtime.
It defines algorithms, encapsulates them, and uses them interchangeably.
Implementation of an interchangeable operator object that operates on integers.
type Operator interface {
Apply(int, int) int
}
type Operation struct {
Operator Operator
}
func (o *Operation) Operate(leftValue, rightValue int) int {
return o.Operator.Apply(leftValue, rightValue)
}
type Addition struct{}
func (Addition) Apply(lval, rval int) int {
return lval + rval
}
add := Operation{Addition{}}
add.Operate(3, 5) // 8
type Multiplication struct{}
func (Multiplication) Apply(lval, rval int) int {
return lval * rval
}
mult := Operation{Multiplication{}}
mult.Operate(3, 5) // 15