What is the difference between Strategy design pattern and State design pattern?

Chin Tser picture Chin Tser · Nov 1, 2009 · Viewed 75k times · Source

What are the differences between the Strategy design pattern and the State design pattern? I was going through quite a few articles on the web but could not make out the difference clearly.

Can someone please explain the difference in layman's terms?

Answer

user597474 picture user597474 · Oct 13, 2012

Honestly, the two patterns are pretty similar in practice, and the defining difference between them tends to vary depending on who you ask. Some popular choices are:

  • States store a reference to the context object that contains them. Strategies do not.
  • States are allowed to replace themselves (IE: to change the state of the context object to something else), while Strategies are not.
  • Strategies are passed to the context object as parameters, while States are created by the context object itself.
  • Strategies only handle a single, specific task, while States provide the underlying implementation for everything (or most everything) the context object does.

A "classic" implementation would match either State or Strategy for every item on the list, but you do run across hybrids that have mixes of both. Whether a particular one is more State-y or Strategy-y is ultimately a subjective question.