Este artigo descreve o uso do modo de estratégia para o Java para resolver o problema dos produtos promocionais do shopping center. Compartilhe -o para sua referência, como segue:
Uma definição de padrão
Modo de política: defina uma série de algoritmos, encapsulam cada algoritmo e podem ser usados de forma intercambiável, e o modo de política permite que o algoritmo mude de forma independente do aplicativo do cliente que o usa.
Exemplos do segundo modo
1 Análise de padrão
Emprestamos produtos promocionais do shopping para ilustrar esse modelo.
2 Diagrama de classe estática no modo de política
3 exemplos de código
3.1 Crie uma estratégia de interface de política
pacote com.demo.strategy;/** * interface de política * * @author * */interface pública IStrategy {/** * Método para calcular o preço real * * @param consumoprice * Valor do consumo * @return */public duplo realPrice (consumo duplo ();}3,2 20% de desconto na estratégia de promoção
pacote com.demo.strategy;/** * 20% de desconto na estratégia de promoção do produto * * @author * */public classe rebatestrategy implementa a istrategy {taxa dupla final privada; / *** Conjunto de métodos de construção Taxa de desconto*/ public rebatestrategy () {this.rate = 0.8; } / ** * Calcule o método de preço real * * @param consumoprice * Valor do consumo * @return * / public duplo realPrice (duplo consumoPrice) {return ConstumingPrice * this.rate; }}3.3 Estratégia promocional para 200 de folga por mais de 1000 yuan, ReduCestrategy
pacote com.demo.strategy;/** * 200 OFF para compras mais de 1000 estratégia de promoção do produto * * @Author * */public class ReduCestrategy implementa o método IStrategy {/** * para calcular o preço real * * @param consumption } else {return ConstumingPrice; }}}3,4 20% de desconto em estratégia promocional por mais de 200 yuan promoção
pacote com.demo.strategy;/** * 200 ou mais, 20% de desconto na estratégia de promoção do produto para peças acima de 200 * * @author * */public class Promonsionalstrategy implementa o método IStrategy {/** * para calcular o preço real do preço (consumo de recuo) {consumo de recuperação) (consumo * (** ** * 200) * 0,8; } else {return ConstumingPrice; }}}3.5 Criando um contexto
pacote com.demo.context; importar java.math.bigdecimal; importar com.demo.strategy.istrategy;/** * ambiente de contexto * * @author * */public class Context {// Política atual Estratégia privada de istsrategy; // Defina a política atual public void SetStrategy (estratégia da IStrategy) {this.strategy = estratégia; } // Use a estratégia para calcular o preço público duplo público (duplo consumoPrice) {// Use a estratégia de promoção do produto específica para obter o valor real do consumo duplo realPrice = this.strategy.realPrice (ConsumePeRPice); // formate o 1 dígito após o ponto decimal, ou seja: preciso para o ângulo bigdecimal bd = novo bigdecimal (realPrice); bd = bd.setscale (1, bigdecimal.round_down); return bd.doubleValue (); }}3.6 Cliente de compras e consumo de consumidores
pacote com.demo; importar java.util.random;/** * aplicativo cliente * * @author * */public class Client {/** * @param args */public static void main (string [] args) {// crie uma instância do objeto de ambiente para cima e para baixo do ambiente // contexto new Context = new Context (); // Objeto de número aleatório aleatório aleatório = novo aleatório (); for (int i = 0; i <10; i ++) {// Como gerar números aleatórios Determine qual estratégia de promoção usar int x = aleatom.nextint (3); // O preço do consumidor também é gerado por números aleatórios (não pode ser 0) duplo consumoPrice = 0; while ((consumPeprice = aleatom.nextInt (2000)) == 0) {} duplo realPrice = ConsumpingPrice; switch (x) {case 0: // 20% off Products // context.SetStrategy (new Rebatestrategy ()); RealPrice = ConsumpingPrice * 0.8; quebrar; Caso 1: // 20% de desconto em produtos acima de 200 // context.SetStrategy (new PromotionalStrategy ()); if (consumPeprice> 200) {realPrice = 200 + (ConsumePrice - 200) * 0,8; } quebrar; Caso 2: // 200 Desativado para compras acima de 1000 // Context.SetStrategy (new ReduCestrategy ()); if (consumPeprice> = 1000) {RealPrice = ConsumpingPrice - 200; } quebrar; } System.out.print ("【" + (x == 0? "20% de desconto para compras acima de 200": (x == 1? "20% de desconto para compras acima de 1000": "")) + "】 Produto:"); System.out.println ("Preço original:" + consumoPrice + " - Preço após desconto:" + RealPrice); }}}4 resultados de execução
【200 Deslocado para compras acima de 1000】 Produto: Preço original: 908.0 - Preço após desconto: 908.0
【200 Deslocado para compras acima de 1000】 Produto: Preço original: 1129.0 - Preço após desconto: 929.0
【200 Deslocado para compras acima de 1000】 Produto: Preço original: 829.0 - Preço após desconto: 829.0
[20% de desconto] Produto: Preço original: 518.0 - Preço após desconto: 414.4000000000000003
【200 Deslocado para compras acima de 1000】 Produto: Preço original: 1230.0 - Preço após desconto: 1030.0
【20% de desconto】 Produto: Preço original: 106.0 - Preço após desconto: 84.8000000000000001
【200 Deslocado para compras acima de 1000】 Produto: Preço original: 1134.0 - Preço após desconto: 934.0
[20% de desconto para peças acima de 200] Produto: Preço original: 664.0 - Preço após desconto: 571.2
【200 Deslocado para compras acima de 1000】 Produto: Preço original: 564.0 - Preço após desconto: 564.0
【200 Deslocado para compras acima de 1000】 Produto: Preço original: 730.0 - Preço após desconto: 730.0
Três princípios de design deste padrão
1 Princípio de "Close Open"
2 Princípio de responsabilidade única
Quatro ocasiões de uso
1 Quando os comportamentos de desempenho de várias classes são diferentes e é necessário selecionar dinamicamente o comportamento de execução específico no tempo de execução.
2 É necessário usar estratégias diferentes em diferentes situações, ou as estratégias podem ser implementadas de outras maneiras no futuro.
3 Quando for necessário ocultar os detalhes da implementação de estratégias específicas, cada estratégia específica é independente uma da outra.
4 Quando vários comportamentos ocorrem em uma classe e vários ramos condicionais são usados em uma operação para julgar o uso de múltiplos comportamentos, o padrão de política pode ser usado para implantar as ações de cada ramo condicional em uma estratégia específica.
Diagrama de classes estática no modo de cinco estratégias
For more Java-related content, readers who are interested in this site can view the topics: "Introduction and Advanced Tutorial on Java Object-Oriented Programming", "Tutorial on Java Data Structure and Algorithm", "Summary of Java Operation DOM Node Skills", "Summary of Java File and Directory Operation Skills" and "Summary of Java Cache Operation Skills"
Espero que este artigo seja útil para a programação Java de todos.