add strategy pattern
Merge branch 'feature-strategy' into develop