Applied Design Patterns with Java
Behavioral :: Strategy (315) {C ch 24}
Intent
Define a family of algorithms, encapsulate each one, and make
them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
As Known As
Policy
Motivation
Many algorithms exist for breaking a stream of
text into lines. Hard-wiring all such algorithms into the classes that require them isn't desirable for several
reasons:
Avoid these problems by defining classes that encapsulate
different linebreaking algorithms. An algorithm that's encapsulated in this way is called a Strategy.
Suppose a Composition class is responsible for maintaining and updating the linebreaks of text displayed in a
text viewer. Linebreaking strategies aren't implemented by the class Composition. Instead, they are implemented
separately by subclasses of the abstract Compositor class, as shown here:
Compositor subclasses implement different Strategy patterns:
A Composition maintains a reference to a Compositor object. Whenever
a Composition reformats its text, it forwards this responsibility to its Compositor object. The client of Composition
specifies which Compositor should be used by installing the Compositor it desires into the Composition.