1
0
mirror of https://github.com/tmrts/go-patterns.git synced 2024-11-21 20:46:08 +03:00
go-patterns/behavioral/strategy.md

56 lines
1.1 KiB
Markdown
Raw Permalink Normal View History

2017-04-28 16:11:28 +03:00
# Strategy Pattern
2016-04-15 14:51:23 +03:00
Strategy behavioral design pattern enables an algorithm's behavior to be selected at runtime.
It defines algorithms, encapsulates them, and uses them interchangeably.
## Implementation
Implementation of an interchangeable operator object that operates on integers.
```go
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)
}
```
## Usage
### Addition Operator
```go
type Addition struct{}
func (Addition) Apply(lval, rval int) int {
return lval + rval
}
```
```go
add := Operation{Addition{}}
add.Operate(3, 5) // 8
```
### Multiplication Operator
```go
type Multiplication struct{}
func (Multiplication) Apply(lval, rval int) int {
return lval * rval
}
```
```go
mult := Operation{Multiplication{}}
mult.Operate(3, 5) // 15
```
## Rules of Thumb
- Strategy pattern is similar to Template pattern except in its granularity.
- Strategy pattern lets you change the guts of an object. Decorator pattern lets you change the skin.