Intenção
Defina uma série de algoritmos, encapsule cada algoritmo e torne-os intercambiáveis.
O modo de estratégia permite que o algoritmo seja independente do cliente que o utiliza.
Diagrama de Classe
- A interface Strategy define uma família de algoritmos, todos os quais implementam o método behavior ().
- Context é uma classe que usa esta família de algoritmos.O método doSomething () chama o comportamento (), e o método setStrategy (Strategy) pode alterar dinamicamente o objeto de estratégia, ou seja, pode alterar dinamicamente o algoritmo usado pelo Context.
Implementação
Projete um pato que pode alterar a chamada dinamicamente. A família de algoritmos aqui é o comportamento de chamada do pato.
public interface QuackBehavior {
void quack();
}
public class Quack implements QuackBehavior {
@Override
public void quack() {
System.out.println("quack!");
}
}
public class Squeak implements QuackBehavior{
@Override
public void quack() {
System.out.println("squeak!");
}
}
public class Duck {
private QuackBehavior quackBehavior;
public void performQuack() {
if (quackBehavior != null) {
quackBehavior.quack();
}
}
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}
}
public class Client {
public static void main(String[] args) {
Duck duck = new Duck();
duck.setQuackBehavior(new Squeak());
duck.performQuack();
duck.setQuackBehavior(new Quack());
duck.performQuack();
}
}
squeak!
quack!
JDK
- java.util.Comparator # compare ()
- javax.servlet.http.HttpServlet
- javax.servlet.Filter # doFilter ()