El patrón de estrategia también se denomina patrón de política.
Aquí hay una historia sobre el patrón de estrategia. Suponga que Mike a veces acelera cuando conduce, pero no siempre lo hace. Puede ser detenido por un oficial de policía. Es posible que la policía sea muy amable, que lo dejaría ir sin multa o con una simple advertencia. (Llamemos a este tipo de policía «NicePolice».) También es posible que sea atrapado por una policía dura y reciba una multa. (Llamemos a este tipo de policía «HardPolice».) No sabe qué tipo de policía lo detendría, hasta que lo atrapan, es decir, en tiempo de ejecución. Este es el objetivo del patrón de estrategia.
Diagrama de clases de patrones de estrategia
Patrón de estrategia Código Java
Definir una estrategia de interfaz, que tiene un método processSpeeding ()
public interface Strategy { //defind a method for police to process speeding case. public void processSpeeding(int speed); } |
Ahora tenemos dos tipos de agentes de policía.
public class NicePolice implements Strategy{ @Override public void processSpeeding(int speed) { System.out.println("This is your first time, be sure don't do it again!"); } } |
public class HardPolice implements Strategy{ @Override public void processSpeeding(int speed) { System.out.println("Your speed is "+ speed+ ", and should get a ticket!"); } } |
Defina una situación en la que se verá involucrado un oficial de policía para procesar el exceso de velocidad.
public class Situation { private Strategy strategy; public Situation(Strategy strategy){ this.strategy = strategy; } public void handleByPolice(int speed){ this.strategy.processSpeeding(speed); } } |
Finalmente, pruebe el resultado.
public class Main { public static void main(String args[]){ HardPolice hp = new HardPolice(); NicePolice ep = new NicePolice(); // In situation 1, a hard officer is met // In situation 2, a nice officer is met Situation s1 = new Situation(hp); Situation s2 = new Situation(ep); //the result based on the kind of police officer. s1.handleByPolice(10); s2.handleByPolice(10); } } |
La salida es:
Your speed is 10, and should get a ticket! This is your first time, be sure don't do it again!
Puede comparar este patrón con el patrón de estado que es muy similar. La principal diferencia es que el patrón de estado implica cambiar el comportamiento de un objeto cuando el estado del objeto cambia, mientras que el patrón de estrategia se trata principalmente de usar un algoritmo diferente en una situación diferente.
Patrón de estrategia en JDK
1). Java.util.Collections # sort (List
2). java.util.Arrays # sort (T[], Comparador super T> c)
La
Es posible que también desee consultar la diferencia entre comparador y comparable.