Este artigo descreve o princípio e o uso do padrão de design Java. Compartilhe -o para sua referência, como segue:
O padrão de política define uma série de algoritmos e encapsula cada algoritmo, tornando -os substituíveis entre si. O padrão de política permite que o algoritmo mude de forma independente dos clientes que o utiliza. Entre eles, a classe Treeset e a TreeMap em JDK usam o padrão de política. Essas duas classes são classes de coleta classificadas e as regras de classificação são equivalentes a uma série de algoritmos definidos no padrão de política, e a classe de coleta é equivalente a uma classe de ambiente no padrão de política para os usuários usarem. Somente sabendo que Treeset e Treemap são classificados. Quanto à classificação, é determinado pelo algoritmo de classificação.
O modelo de estratégia consiste em três partes: função de política abstrata, papel político específico e papel ambiental.
Restro de Política Resumo : Uma Classe de Política, geralmente implementada por uma interface ou classe abstrata.
Função de estratégia específica : a classe de estratégia abstrata é implementada e os algoritmos e comportamentos relacionados são embalados.
Função do ambiente : mantém uma referência a uma classe de política e é chamada para o cliente.
Aqui está um exemplo simples de código de padrão de política:
1. Função da estratégia abstrata : Defina uma estratégia de interface.
pacote com.test;/** * Função abstrata do padrão de estratégia * @Author Zhouwen * */estratégia de interface pública {public int calcular (int a, int b);}2. Função de estratégia específica : implemente a interface da estratégia. No exemplo, a operação de adição, subtração, multiplicação e divisão é implementada.
pacote com.test;/*** Modo de política Classe de estratégia específica* Implementar operações de adição* @author zhouwen**/public classe addStrategy implementa estratégia {@Override public int calcular (int a, int b) {return a + b; }} pacote com.test;/*** Modo de política Classe de estratégia específica* Implementar operação de subtração* @Author Zhouwen**/public class SubtractStrategy implementa estratégia {@Override public int calcular (int a, int b) {return a - b; }} pacote com.test;/** * Modo de política Classe de estratégia específica * Implemente operação de multiplicação * @author zhouwen * */public class multiplystragerey implementa estratégia {@Override public int calcular (int a, int b) {return a * b; }} pacote com.test;/*** Modo de política Classe de estratégia específica* Implementar operação de divisão* @author zhouwen**/public class divideStrategy implementa estratégia {@Override public int calcular (int a, int b) {return a/b; }}3. Função do ambiente : defina uma referência de função abstrata na função do ambiente e exponha o método de cálculo para o cliente ligar.
pacote com.test;/** * Modo de política Classe de ambiente * @author zhouwen * */public class Environment {estratégia privada; Ambiente público (estratégia de estratégia) {this.strategy = estratégia; } // Use para alterar a política pública void SetStrategy (estratégia de estratégia) {this.strategy = estratégia; } estratégia pública getStrategy () {retorna estratégia; } // Expor a interface de computação para o cliente chamar de cálculo public int (int a, int b) {retornar estratégia.CalCulate (a, b); }}4. Finalmente, escreva o código do cliente:
pacote com.test; public class cliente {public static void main (string [] args) {addStrategy addStrategy = new addStrategy (); Ambiente ambiente = novo ambiente (AddStrategy); System.out.println (Environment.Calculate (3, 4)); SubtractStrategy substrategy = new SubtractStrategy (); Environment.SetStrategy (Substrategy); System.out.println (Environment.Calculate (3, 4)); Multiplystragey multiplystrategy = new multiplystragety (); Environment.SetStrategy (multiplystrategy); System.out.println (Environment.Calculate (3, 4)); Dividestrategy divideStrategy = new DivideStrategy (); Environment.SetStrategy (dividestrategy); System.out.println (Environment.Calculate (3, 4)); }}Resumir:
Com o cliente System.out.println(environment.calculate(3, 4)); Este código, não sabemos qual classe de implementação é chamada. Somente conhecendo a classe de política específica passada para a função do meio ambiente, sabemos para qual classe chamar. Isso pode alcançar a separação do cliente e o algoritmo de política específico, facilitando o programa, facilitando a troca, o entendimento e a expansão.
Vantagens e desvantagens do modelo de estratégia:
vantagem:
1. O objetivo do padrão de política é encapsular cada algoritmo em uma classe independente com uma interface comum para um conjunto de algoritmos, para que possam ser substituídos um pelo outro. Conforme previsto no exemplo, a política é substituída pelo método definido.
2. O padrão de política permite que o algoritmo mude sem afetar o cliente. Use padrões de política para separar o comportamento do ambiente.
3. A classe do ambiente é responsável por manter e consultar classes de comportamento, e vários algoritmos são fornecidos em estratégias específicas. Como o algoritmo e o ambiente são independentes, a modificação do algoritmo não afetará o ambiente e o cliente.
deficiência:
1. O cliente deve conhecer todas as classes de política e decidir qual classe de política usar a seu próprio critério.
2. Isso causará muitas 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.