The goal of this PR is to refactor the implementation of the strategies to move from an interface with an implementation dedicated to each strategy to a generic strategy whose behaviour is defined according to its options.
This refactoring should reduces the code duplication and ease maintenance and the addition of new feature.
Note: I tried to create unit commits to make it easier to review pull request commit by commit.
The goal of this PR is to refactor the implementation of the strategies to move from an interface with an implementation dedicated to each strategy to a generic strategy whose behaviour is defined according to its options.
This refactoring should reduces the code duplication and ease maintenance and the addition of new feature.
Note: I tried to create unit commits to make it easier to review pull request commit by commit.