Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does the Strategy Pattern violate the Single Responsibility Principle?

If the Single Responsibility Principle states that every object must have a single reason to change and a single strategy class implemented with the Strategy pattern (by definition) has multiple methods that can change for any number of reasons, does that mean that it's impossible to implement the Strategy pattern without violating the SRP?

like image 727
plaureano Avatar asked Mar 01 '23 19:03

plaureano


2 Answers

How so? Strategy pattern if I recollect is basically a way to decouple the logic/algorithm being used. So Client has m_IAlgorithm. IAlgorithm should have a small set of methods if not one.

So the only reason that a AlgoImplementation class can change is

  • if there is a change in the algorithm it implements. (change in its responsibility/behavior)
  • or if IAlgoritm changes.. which would be rare unless you made a mistake in defining the interface. (Its a change in its own public interface - so don't think its a violation of SRP.)
like image 177
Gishu Avatar answered Mar 08 '23 13:03

Gishu


I actually see the opposite. The strategy pattern lets you decouple two things, the (potential) algorithms used to get some job done and the decision making logic about these algorithms.

I'm not sure if you rather have a class which does both conditional logic on which algorithm to use and also encloses those algorithms. Also, I'm not saying you've implied that but you didn't gave an example where Strategy would break SRP and what's, in your opinion, a better design.

like image 30
Ionuț G. Stan Avatar answered Mar 08 '23 14:03

Ionuț G. Stan