Este artículo describe el uso del modo de estrategia para Java para resolver el problema de los productos promocionales del centro comercial. Compártelo para su referencia, como sigue:
Una definición de patrón
Modo de política: Defina una serie de algoritmos, encapsulan cada algoritmo y se puede usar indistintamente, y el modo de política permite que el algoritmo cambie independientemente de la aplicación del cliente que lo usa.
Ejemplos del segundo modo
1 análisis de patrones
Tomamos prestados productos promocionales del centro comercial para ilustrar este modelo.
2 Modo de política Diagrama de clase estática
3 ejemplos de código
3.1 Crear una interfaz de política-Distraygy
paquete com.demo.strategy;/** * Interfaz de política * * @author * */pública interfaz istrategy {/** * Método para calcular el precio real * * @param consumoprice * Cantidad de consumo * @return */public double RealPrice (Double ConsutePrice);}3.2 20% de descuento en la estrategia de promoción-reBATestrateGy
paquete com.demo.strategy;/** * 20% de descuento en la estrategia de promoción del producto * * @author * */public class Rebatestrategy implementa Istrategy {Private Double Tasa final; / *** Método de construcción establece una tasa de descuento*/ public RebatestrateGy () {this.rate = 0.8; } / ** * Calcule el método de precio real * * @param consumoPrice * Cantidad de consumo * @return * / public double RealPrice (Double ConsumePrice) {return ConsumePrice * this.Rate; }}3.3 Estrategia promocional para 200 de descuento para más de 1000 yuanes, reducestrategy
paquete com.demo.strategy;/** * 200 Desactivado para compras sobre 1000 Estrategia de promoción de productos * * @author * */public class Reducestrategy implementa istrategy {/** * Método para calcular el precio real * * @param consumoPrice * consumo Canting * @return */public double RealPrice (Double ConsumePrice) {if (ConsumePrice> = 1000) {ReturnPrice: } else {devuelve consumoPrice; }}}3.4 20% de descuento en la estrategia promocional para más de 200 yuanes promocionalestrategy
paquete com.demo.strategy;/** * 200 o más, 20% de descuento para la estrategia de promoción de productos para piezas superiores a 200 * * @author * */public class promocionAlstrategy implementa istegy {/** * método para calcular el precio real * * * @param consumoPrice * consumo consumo * @return */public double RealPrice (Double ConsumePrice) {si ((consumo de consumo de consumo de consumo) 200) * 0.8; } else {devuelve consumoPrice; }}}3.5 Creación de un contexto
paquete com.demo.context; import java.math.bigDecimal; import com.demo.strategy.istratey;/** * entorno de contexto * * @author * */context de clase pública {// Política actual Estrategia privada de istrategy; // Establezca la política actual pública void setStrategy (estrategia istrategy) {this.strategy = estrategia; } // Use la estrategia para calcular el precio public Public Double Cul (Double ConsumePrice) {// Use una estrategia específica de promoción de productos para obtener la cantidad de consumo real Double RealPrice = this.strategy.RealPrice (Consumeprice); // Formatear el 1 dígito después del punto decimal, es decir: preciso al ángulo BigDecimal BD = new BigDecimal (RealPrice); bd = bd.setscale (1, bigDecimal.round_down); return bd.DoubleValue (); }}3.6 Cliente de compras y consumo de consumo
paquete com.demo; import java.util.random;/** * Aplicación de cliente * * @author * */public class Client {/** * @param args */public static void main (string [] args) {// Crear una instancia del objeto de entorno ascendente // contexto de contexto = nuevo contexto (); // Objeto de número aleatorio Random Random = new Random (); para (int i = 0; i <10; i ++) {// Cómo generar números aleatorios determinar qué estrategia de promoción usar int x = random.nextint (3); // El precio del consumidor también se genera mediante números aleatorios (no puede ser 0) doble consumo de consumo = 0; while ((consumeprice = random.nextint (2000)) == 0) {} doble realPrice = consumoPrice; switch (x) {case 0: // 20% de descuento en productos // context.setstrategy (new Rebatestrategy ()); RealPrice = ConsutePrice * 0.8; romper; Caso 1: // 20% de descuento en productos por encima de 200 // context.setStrategy (nuevo promocionalStrategy ()); if (Consumeprice> 200) {RealPrice = 200 + (ConsumePrice - 200) * 0.8; } romper; Caso 2: // 200 de descuento para compras superiores a 1000 // context.setstrategy (new ReducestrateGy ()); if (consumeprice> = 1000) {realPrice = consumoPrice - 200; } romper; } System.out.print ("【" + (x == 0? "20% de descuento para compras de más de 200": (x == 1? "20% de descuento para compras de más de 1000": "")) + "】 Producto:"); System.out.println ("Price original:" + ConsutePrice + " - Precio después del descuento:" + RealPrice); }}}4 Resultados de ejecución
【200 Desactivado para compras de más de 1000】 Producto: Precio original: 908.0 - Precio después del descuento: 908.0
【200 Desactivado para compras de más de 1000】 Producto: Precio original: 1129.0 - Precio después del descuento: 929.0
【200 Desactivado para compras de más de 1000】 Producto: Precio original: 829.0 - Precio después del descuento: 829.0
[20% de descuento] Producto: Precio original: 518.0 - Precio después del descuento: 414.4000000000000003
【200 Desactivado para compras de más de 1000】 Producto: Precio original: 1230.0 - Precio después del descuento: 1030.0
【20% de descuento】 Producto: Precio original: 106.0 - Precio después del descuento: 84.8000000000000001
【200 Desactivado para compras de más de 1000】 Producto: Precio original: 1134.0 - Precio después del descuento: 934.0
[20% de descuento para piezas superiores a 200] Producto: Precio original: 664.0 - Precio después del descuento: 571.2
【200 Desactivado para compras de más de 1000】 Producto: Precio original: 564.0 - Precio después del descuento: 564.0
【200 Desactivado para compras de más de 1000】 Producto: Precio original: 730.0 - Precio después del descuento: 730.0
Tres principios de diseño de este patrón
Principio de 1 "cierre abierto"
2 Principio de responsabilidad única
Cuatro ocasiones de uso
1 Cuando los comportamientos de rendimiento de múltiples clases son diferentes, y es necesario seleccionar dinámicamente el comportamiento de ejecución específico en el momento de ejecución.
2 Es necesario usar diferentes estrategias en diferentes situaciones, o las estrategias pueden implementarse de otras maneras en el futuro.
3 Cuando es necesario ocultar los detalles de implementación de estrategias específicas, cada estrategia específica es independiente entre sí.
4 Cuando se producen múltiples comportamientos en una clase y se utilizan múltiples ramas condicionales en una operación para juzgar el uso de múltiples comportamientos, el patrón de política se puede utilizar para implantar las acciones de cada rama condicional en una estrategia específica.
Diagrama de clase estática en modo de cinco estrategias
Para obtener más contenido relacionado con Java, los lectores interesados en este sitio pueden ver los temas: "Introducción y tutorial avanzado sobre la programación orientada a objetos de Java", "Tutorial sobre la estructura de datos de Java y el algoritmo", "Resumen de la operación de Java DOM Node Node", "Summary of Java File and Directory Operation Skilly" y "Summary of Java Cache Skitch" Habilidades "
Espero que este artículo sea útil para la programación Java de todos.