Method refactoring
add facade to control the algorithm selection
Refactoring to handle the parameters in one class
Refactoring the packages