What is it?
Behavioural design pattern that allow algorithms and objects that the algorithms operate on to be separated
Benefits
- OCP: introduce behaviour to classes without changing their implementation.
- SRP: functionality and data in an object can be separated
When to use?
New operations need to be added to all elements of an existing object structure