Define a family of algorithms, encapsulate
each one, and make them interchangeable. Strategy lets the algorithm vary
independently from clients that use it. It’s used to manage algorithms,
relationships and responsibilities between objects.
As per GOF design pattern’s
definition is "Defines a set of
encapsulated algorithms that can be swapped to carry out a specific behavior".
The strategy pattern defines a family of
algorithms, encapsulates each one, and makes them interchangeable. Strategy
lets the algorithm vary independently from clients that use it simple example come in mind is there is one
functionality need to implement and every developer uses different language to
implement it hence we can call it as different strategy.
The Strategy Design Pattern basically
consists of decoupling an algorithm from its host, and encapsulating the
algorithm into a separate class. More simply put, an object and its behaviour
are separated and put into two different classes. This allows you to switch the
algorithm that you are using at any time.
Intent
i) Define
a family of algorithms, encapsulate each one, and make them
interchangeable. Strategy lets the algorithm vary independently from the
clients that use it.
ii) Capture
the abstraction in an interface, bury implementation details in derived
classes.
This allows the behavior of a program to
change dynamically according to configuration details or user preferences. It
also increases flexibility by allowing new algorithms to be easily incorporated
in the future. There are common situations when classes differ only in their behavior. For this cases is a good idea to isolate the algorithms in separate classes in order to have the ability to select different algorithms at runtime.
There are several advantages to doing this. First, if you have several different behaviours that you want an object to perform, it is much simpler to keep track of them if each behaviour is a separate class, and not buried in the body of some method. Should you ever want to add, remove, or change any of the behaviours, it is a much simpler task, since each one is its own class.
Each such behaviour or algorithm encapsulated into its own class is called a Strategy.
When you have several objects that are basically the same, and differ only in their behaviour, it is a good idea to make use of the Strategy Pattern..
Using Strategies, you can reduce these several objects to one class that uses several Strategies. The use of strategies also provides a nice alternative to subclassing an object to achieve different behaviours. When you subclass an object to change its behaviour, that behaviour that it executes is static.
If you wanted to change what it does, you'd have to create a new instance of a different subclass and replace that object with it. With Strategies, however, all you need to do is switch the object's strategy, and it will immediately change how it behaves. Using Strategies also eliminates the need for many conditional statements. When you have several behaviours together in one class, it is difficult to choose among them without resorting to conditional statements.
If you use Strategies you won't need to check for anything, since whatever the current strategy is just executes without asking questions.
No comments:
Post a Comment