Cet article décrit le principe et l'utilisation du modèle de conception Java. Partagez-le pour votre référence, comme suit:
Le modèle de politique définit une série d'algorithmes et résume chaque algorithme, les rendant remplaçables les uns avec les autres. Le modèle de stratégie permet à l'algorithme de changer indépendamment des clients qui l'utilisent. Parmi eux, la classe Treeset et la classe Treemap dans JDK utilisent le modèle de stratégie. Ces deux classes sont des classes de collecte triées et les règles de tri équivalent à une série d'algorithmes définis dans le modèle de stratégie, et la classe de collecte équivaut à une classe d'environnement dans le modèle de politique à utiliser. Sachant seulement que Treeset et Treemap sont triés. Quant à la façon de trier, il est déterminé par l'algorithme de tri.
Le modèle de stratégie se compose de trois parties: rôle politique abstrait, rôle politique spécifique et rôle environnemental.
Rôle de politique abstrait : une classe de politique, généralement implémentée par une interface ou une classe abstraite.
Rôle de stratégie spécifique : La classe de stratégie abstraite est mise en œuvre et des algorithmes et comportements connexes sont emballés.
Rôle de l'environnement : tient une référence à une classe de politique et est finalement appelé au client.
Voici un exemple de code de modèle de stratégie simple:
1. Rôle de la stratégie abstraite : définir une stratégie d'interface.
package com.test; / ** * STRAGGLEMENT RABLATION RÉSUMÉ * @Author Zhouwen * * / Stratégie d'interface publique {public int calcul (int a, int b);}2. Rôle de stratégie spécifique : mettant en œuvre l'interface de stratégie. Dans l'exemple, le fonctionnement de l'addition, de la soustraction, de la multiplication et de la division est implémenté.
package com.test; / ** * Mode de stratégie Classe de stratégie spécifique * Implémentation d'opérations d'addition * @author zhouwen * * / classe publique addStrategy implémente la stratégie {@Override public int calcul (int a, int b) {return a + b; }} package com.test; / ** * Mode de stratégie Classe de stratégie spécifique * Implémentation de l'opération de soustraction * @Author Zhouwen * * / classe publique SoustraireStrategy implémente la stratégie {@Override public int calcul (int a, int b) {return a - b; }} package com.test; / ** * Mode de stratégie Classe de stratégie spécifique * Implémentation de l'opération de multiplication * @Author Zhouwen * * / public class MultiplyStragety implémente la stratégie {@Override public int calcul (int a, int b) {return a * b; }} package com.test; / ** * Mode de stratégie Classe de stratégie spécifique * Implémentation de l'opération de division * @Author Zhouwen * * / Classe publique DividestraSty implémente la stratégie {@Override public int calcul (int a, int b) {return a / b; }}3. Rôle de l'environnement : définir une référence de rôle abstraite dans le rôle de l'environnement et exposer la méthode de calcul que le client peut appeler.
package com.test; / ** * Classe d'environnement de mode politique * @author zhouwen * * / classe publique Environnement {stratégie de stratégie privée; Environnement public (stratégie de stratégie) {this.strategy = stratégie; } // Utiliser pour modifier la politique publique void setStrategy (stratégie stratégie) {this.strategy = stratégie; } Stratégie publique getStrategy () {Stratégie de retour; } // Expose l'interface informatique pour que le client appelle public int calcul (int a, int b) {return Strategy.Calculate (a, b); }}4. Écrivez enfin le code client:
package com.Test; public class Client {public static void main (String [] args) {addStrategy addStrategy = new AddStrategy (); Environnement environnement = nouvel environnement (addStrategy); System.out.println (Environment.Calculate (3, 4)); SubstrAtTrategy substratgy = new soustratestrategy (); Environment.SetStrategy (substratgy); System.out.println (Environment.Calculate (3, 4)); Multiplystragety 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)); }}Résumer:
Avec le System.out.println(environment.calculate(3, 4)); Ce code, nous ne savons pas quelle classe d'implémentation est appelée. Ce n'est qu'en sachant que la classe de politique spécifique transmise au rôle de l'environnement, nous savons quelle classe appeler. Cela peut réaliser la séparation du client et l'algorithme de stratégie spécifique, ce qui rend le programme facile à changer, à comprendre et à développer.
Avantages et inconvénients du modèle de stratégie:
avantage:
1. Le but du modèle de politique est d'encapsuler chaque algorithme dans une classe indépendante avec une interface commune pour un ensemble d'algorithmes, afin qu'ils puissent être remplacés par l'autre. Comme prévu dans l'exemple, la politique est remplacée par la méthode définie.
2. Le modèle de stratégie permet à l'algorithme de changer sans affecter le client. Utilisez des modèles de politique pour séparer le comportement de l'environnement.
3. La classe d'environnement est responsable du maintien et de l'interrogation des classes de comportement, et divers algorithmes sont fournis dans des stratégies spécifiques. Étant donné que l'algorithme et l'environnement sont indépendants, la modification de l'algorithme n'affectera pas l'environnement et le client.
défaut:
1. Le client doit connaître toutes les classes de politique et décider quelle classe de politique utiliser à sa propre discrétion.
2. Cela provoquera de nombreuses stratégies.
Pour plus de contenu lié à Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Introduction et tutoriel avancé sur la programmation Java Oriented Oriented", "Tutorial sur la structure de données Java et l'algorithme", "Résumé des compétences de l'opération Java Dom Dom", "Résumé des compétences de l'opération Java et de l'opération de répertoire" et "Résumé de Java Cache Skills"
J'espère que cet article sera utile à la programmation Java de tous.