Categorías
Design Patterns Stories

Patrón de diseño de Java: estrategia

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!");
	}
}
  Patrón de diseño de Java: Observador

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.

  Serie de tutoriales de Struts 2: Patrón de diseño MVC (diagrama)

Patrón de estrategia en JDK

1). Java.util.Collections # sort (List lista, Comparador c)
2). java.util.Arrays # sort (T[], Comparador c)

La clasificar El método utiliza un comparador diferente en diferentes situaciones. Para saber más sobre este método, consulte Comprensión profunda de Arrays.sort ().

Es posible que también desee consultar la diferencia entre comparador y comparable.

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *