Maison > Java > javaDidacticiel > Analyse d'exemple de modèle de stratégie de modèle de conception Java

Analyse d'exemple de modèle de stratégie de modèle de conception Java

WBOY
Libérer: 2023-05-02 16:49:07
avant
1366 Les gens l'ont consulté

1. Introduction de base

1) Dans Strategy Pattern, les familles d'algorithmes (groupes de stratégies) sont définies et encapsulées séparément afin qu'elles puissent être remplacées les unes par les autres. Ce mode rend les modifications d'algorithme indépendantes des clients qui utilisent l'algorithme

2. ) Cet algorithme incarne plusieurs principes de conception. Premièrement, il sépare le code modifié du code inchangé ; deuxièmement, il est programmé pour des interfaces plutôt que des classes spécifiques (les interfaces stratégiques sont définies ; troisièmement, des combinaisons polyvalentes/Agrégation, utilisent moins d'héritage (clients) ; utiliser des stratégies en combinaison)

Par exemple : pour les économies d'énergie environnementales, trois méthodes d'économie d'énergie sont proposées : économie d'énergie de la carte de base, économie d'énergie SPC, économie d'énergie du produit, différentes méthodes d'économie d'énergie, traitement spécifique des équipements environnementaux. Le processus est différent

2. Méthode traditionnelle

(1) Diagramme de classes

Analyse dexemple de modèle de stratégie de modèle de conception Java

(2) Implémentation du codage

1) Définir une classe abstraite EsPolicy et définir la méthode esPolicyHandler

public abstract class EsPolicy {
    public void esPolicyHandler() {
    }
}
Copier après la connexion

2) BbEsPolicy hérite d'EsPolicy et remplace la méthode esPolicyHandler.

public class BbEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===处理基带板节能策略===");
    }
}
Copier après la connexion

3) SpcEsPolicy hérite d'EsPolicy et remplace la méthode esPolicyHandler

public class SpcEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===Spc节能策略处理===");
    }
}
Copier après la connexion

4) ProdEsPolicy hérite d'EsPolicy et remplace la méthode esPolicyHandler

public class ProdEsPolicy extends EsPolicy {
    @Override
    public void esPolicyHandler() {
        System.out.println("===产品节能策略处理===");
    }
}
Copier après la connexion

5) Test

public class EsPolicyTest {
    public static void main(String[] args) {
        EsPolicy bbEsPolicy = new BbEsPolicy();
        bbEsPolicy.esPolicyHandler();
        SpcEsPolicy spcEsPolicy = new SpcEsPolicy();
        spcEsPolicy.esPolicyHandler();
        ProdEsPolicy prodPolicy = new ProdEsPolicy();
        prodPolicy.esPolicyHandler();
    }
}
Copier après la connexion

Résultats d'exécution

=== Traitement de la carte de base Stratégie d'économie d'énergie = = =
===Traitement de la stratégie d'économie d'énergie Spc====
===Traitement de la stratégie d'économie d'énergie du produit===

Problème : La méthode traditionnelle consiste à hériter de la classe parent via la sous-classe et à écraser la classe parent méthode pour faire la différence entre les différentes sous-classes. Le comportement, les changements locaux apportés aux classes, en particulier les changements locaux apportés aux superclasses, affecteront d'autres parties et auront des effets de débordement

3. Adopter un modèle de stratégie

(1) Diagramme de classe

Analyse dexemple de modèle de stratégie de modèle de conception Java

( 2) Implémentation du codage

1) Définir l'interface de politique et définir la méthode abstraite

public interface EsPolicyHandler {
    void esPolicyHandler();
}
Copier après la connexion

2) BbEsPolicyHandler implémente l'interface de politique et implémente la méthode esPolicyHandler

public class BbEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===基带板节能策略处理===");
    }
}
Copier après la connexion

3) SpcEsPolicyHandler implémente l'interface de politique et implémente la méthode esPolicyHandler

public class SpcEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===Spc节能策略处理===");
    }
}
Copier après la connexion

4) ProdEsPolicyHandler implémente l'interface de stratégie et implémente la méthode esPolicyHandler

public class ProdEsPolicyHandler implements EsPolicyHandler {
    @Override
    public void esPolicyHandler() {
        System.out.println("===产品节能策略处理===");
    }
}
Copier après la connexion

5) Définir la classe abstraite EsPolicy et injecter EsPolicyHandler comme attribut

public abstract class EsPolicy {
    EsPolicyHandler esPolicyHandler;
    public void setEsPolicyHandler(EsPolicyHandler esPolicyHandler) {
        this.esPolicyHandler = esPolicyHandler;
    }
    public void esPolicyHandler() {
        if (null != esPolicyHandler) {
            esPolicyHandler.esPolicyHandler();
        }
    }
}
Copier après la connexion

6) BbEsPolicy hérite d'EsPolicy et instancie la propriété d'interface esPolicyHandler dans le constructeur

public class BbEsPolicy extends EsPolicy {
    public BbEsPolicy() {
        esPolicyHandler = new BbEsPolicyHandler();
    }
}
Copier après la connexion

7 ) PolitiqueSpcEs hérite d'EsPolicy et l'instancie dans les propriétés de l'interface du constructeur esPolicyHandler

public class SpcEsPolicy extends EsPolicy {
    public SpcEsPolicy() {
        esPolicyHandler = new SpcEsPolicyHandler();
    }
}
Copier après la connexion

8) ProdEsPolicy hérite d'EsPolicy et instancie les propriétés de l'interface esPolicyHandler dans la méthode du constructeur

public class ProdEsPolicy extends EsPolicy {
    public ProdEsPolicy() {
        esPolicyHandler = new ProdEsPolicyHandler();
    }
}
Copier après la connexion

9) Test

public class EsPolicyTest {
    public static void main(String[] args) {
        BbEsPolicy bbEsPolicy = new BbEsPolicy();
        bbEsPolicy.esPolicyHandler();
        SpcEsPolicy spcEsPolicy = new SpcEsPolicy();
        spcEsPolicy.esPolicyHandler();
        ProdEsPolicy prodEsPolicy = new ProdEsPolicy();
        prodEsPolicy.esPolicyHandler();
    }
}
Copier après la connexion

10) Résultats de l'exécution

===Base de traitement bande stratégies d'économie d'énergie du tableau ===
= ==Spc Energy Saving Strategy Processing===
===Produit Energy Saving Strategy Processing===

4. au modèle de stratégie est : analyser les parties changeantes et les parties inchangées du projet Partie

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

3) incarne le principe "fermé à la modification, ouvert à l'extension", le client ajoute un comportement sans modifier le code d'origine. Il lui suffit d'ajouter une stratégie (ou un comportement), évitant ainsi l'utilisation de transferts multiples. déclarations (if...else if...else)

4) Fournit un héritage remplaçable Méthode relationnelle : 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 facilite le changement , facile à comprendre et facile à étendre

5) Il convient de noter que : chaque fois que vous ajoutez une stratégie, vous devez ajouter une classe, cela entraînera un grand nombre de classes s'il y a trop de stratégies

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal