Notes de modèle de conception 23 - modèle de stratégie (stratégie)

Pour écrire un projet de canard, les exigences spécifiques sont les suivantes :

1) Il existe différents canards (tels que les canards sauvages, les canards de Pékin, les sarcelles, etc. Les canards ont divers comportements, tels que crier, voler, etc.)

2) Afficher les informations sur le canard

 

Solution traditionnelle :

Tous les canards intégrés de Duck

 

 

 

Analyse des problèmes et solutions mises en œuvre de manière traditionnelle

1) Les autres canards héritent tous de la classe Canard, donc voler fait voler toutes les sous-classes, ce qui est incorrect

2) Le problème mentionné ci-dessus en 1 est en fait un problème causé par l'héritage : des modifications partielles des classes, en particulier des modifications de superclasse, affecteront d'autres parties. il y aura des effets secondaires

3) Afin d'améliorer le problème 1, nous pouvons le résoudre en redéfinissant la méthode fly => redéfinissant la solution

4) Revoici le problème, si nous avons un toy duck ToyDuck, nous avons besoin de ToyDuck pour couvrir toutes les méthodes d'implémentation de Duck => mode stratégie de solution (strategy pattern)

 

 

introduction de base

1) Dans le modèle de stratégie, les familles d'algorithmes sont définies et encapsulées séparément afin qu'elles puissent être remplacées les unes par les autres.Ce mode rend le changement d'algorithme indépendant des clients qui utilisent l'algorithme

2) Cet algorithme incarne plusieurs principes de conception. Premièrement, il sépare le code changeant du code inchangé ; deuxièmement, il cible la programmation d'interface au lieu de classes spécifiques (la stratégie d'interface est définie ); troisièmement, il utilise plusieurs combinaisons/Agrégation, moins d'héritage (les clients utilisent des stratégies par la composition).

 

 

Diagramme de classe de principe du modèle de stratégie

Explication : Comme le montre la figure ci-dessus, le contexte client a une stratégie de variable membre ou d'autres interfaces de stratégie. Quant à la stratégie à utiliser, nous pouvons la spécifier dans le constructeur.

 

Code de base :


Dans la méthode principale :
        Duck toyDuck = new ToyDuck()
        ;

Lors de l'appel de la méthode fly() :
    public void fly() {         //amélioration         if(flyBehavior != null) {             flyBehavior.fly();         }     }
        





 

Le flyBehavior encapsule une stratégie de vol spécifique, qui est définie lorsque le flyBehavior est initialisé.

 

Notes et détails du modèle de stratégie

1) La clé du modèle de stratégie est d'analyser les parties changeantes et inchangées du projet

2) L'idée centrale du modèle de stratégie est : utiliser plus de combinaison/agrégation et moins d'héritage ; utiliser la combinaison de classes de comportement au lieu de l'héritage de comportement. plus flexible

3) Il incarne le principe de "fermé pour modification, ouvert pour extension". Le client n'a pas besoin de modifier le code d'origine pour ajouter un comportement, il suffit d'ajouter une stratégie (ou un comportement), en évitant l'utilisation de plusieurs instructions de transfert (if. .else si. .else)

4) Fournit un moyen de remplacer la relation d'héritage : le modèle de stratégie encapsule l'algorithme dans une classe de stratégie indépendante afin que vous puissiez le modifier indépendamment de son contexte, ce qui le rend facile à changer, facile à comprendre et facile à développer.

5) Il est à noter qu'à chaque fois qu'une stratégie est ajoutée, une classe doit être ajoutée. Lorsqu'il y a trop de stratégies, le nombre de classes sera énorme

 

 

 

 

 

 

 

 

Je suppose que tu aimes

Origine blog.csdn.net/qq_22059611/article/details/103315214
conseillé
Classement