Programming Patterns. Strategy, Observer, Iterator
Use when you want to select between different algorithms in the process of task resolving. So basically all that you need to realize this pattern are strategies (each of them in the separated component/class, but with the same interface) and strategy selector (decides what strategy is more effective at the moment and uses it).
We are looking forward to meeting you on our website soshace.com