The Chain of Responsibility pattern is very appealing to me.
In this pattern, the request and receiver are decoupled, and each handler is isolated, forming a chain of handlers to process the request.
If an algorithm requires completely different implementations, I recommend using the Strategy pattern. Each algorithm implementation is encapsulated, so changing one does not require changes to the others.
Check out this post before considering using it.