Maison  >  Article  >  Java  >  Une étude approfondie du modèle de stratégie des modèles de conception Java

Une étude approfondie du modèle de stratégie des modèles de conception Java

WBOY
WBOYoriginal
2024-05-09 18:42:01746parcourir

Le modèle de stratégie est un modèle de conception qui permet des changements dynamiques dans les algorithmes ou les comportements en leur permettant de changer indépendamment des objets clients. Ce modèle comprend les rôles Contexte, Stratégie et ConcreteStrategy. Dans un cas pratique, cela peut nous aider à créer des applications qui utilisent différents algorithmes pour calculer les notes des étudiants. Les avantages du modèle Strategy incluent la flexibilité, le découplage, l’évolutivité et la réutilisabilité. Il convient aux situations dans lesquelles le système dispose de plusieurs façons d'effectuer des tâches, l'algorithme ou le comportement doit être modifié de manière dynamique au moment de l'exécution et le couplage du code client avec l'implémentation spécifique de l'algorithme ou du comportement doit être évité.

Une étude approfondie du modèle de stratégie des modèles de conception Java

Une exploration approfondie du modèle de stratégie des modèles de conception Java

Vue d'ensemble

Le modèle de stratégie est un modèle de conception qui permet à un algorithme ou à un comportement de changer indépendamment de l'objet client, de sorte que l'algorithme ou le comportement peuvent interagir les uns avec les autres au moment de l’exécution du changement. Ce modèle offre de la flexibilité, permettant de modifier dynamiquement le comportement de l'application sans modifier le code client.

Structure

Le modèle de stratégie se compose généralement des rôles suivants :

  • Contexte : contient une référence à la stratégie et appelle sa méthode d'exécution.
  • Stratégie : Une interface qui définit des algorithmes ou des comportements.
  • ConcreteStrategy (stratégie spécifique) : L'algorithme ou le comportement spécifique qui implémente l'interface Strategy.

Exemple pratique

Considérons une application qui utilise différents algorithmes pour calculer les notes des élèves. Nous pouvons utiliser Strategy Pattern pour réaliser ce genre de fonctionnalité :

// Context (上下文)
public class StudentGradingContext {
    private GradingStrategy strategy;

    public StudentGradingContext(GradingStrategy strategy) {
        this.strategy = strategy;
    }

    public double calculateGrade(double score) {
        return strategy.calculateGrade(score);
    }
}

// Strategy (策略)
public interface GradingStrategy {
    double calculateGrade(double score);
}

// ConcreteStrategy (具体策略)
public class SimpleGradingStrategy implements GradingStrategy {
    @Override
    public double calculateGrade(double score) {
        return score;
    }
}

// ConcreteStrategy (具体策略)
public class WeightedGradingStrategy implements GradingStrategy {
    private double weight;

    public WeightedGradingStrategy(double weight) {
        this.weight = weight;
    }

    @Override
    public double calculateGrade(double score) {
        return score * weight;
    }
}

// Client (客户端)
public class Client {
    public static void main(String[] args) {
        StudentGradingContext context = new StudentGradingContext(new SimpleGradingStrategy());
        double grade = context.calculateGrade(85.0);
        System.out.println("Grade: " + grade);

        context = new StudentGradingContext(new WeightedGradingStrategy(0.8));
        grade = context.calculateGrade(90.0);
        System.out.println("Weighted Grade: " + grade);
    }
}

Sortie :

Grade: 85.0
Weighted Grade: 72.0

Avantages

  • Flexibilité : Permet de changer dynamiquement l'algorithme ou le comportement sans modifier le code client.
  • Découplage : Dissocier les algorithmes ou les comportements des clients qui les utilisent.
  • Extensibilité : Facile d'ajouter de nouveaux algorithmes ou comportements, il suffit de créer de nouvelles classes de stratégie concrètes.
  • Réutilisabilité : Le même algorithme ou comportement peut être utilisé dans plusieurs clients.

Scénarios d'utilisation :

  • Lorsqu'un système dispose de plusieurs façons d'effectuer des tâches.
  • Quand un algorithme ou un comportement doit changer dynamiquement au moment de l'exécution.
  • Quand il faut éviter le couplage entre le code client et l'implémentation spécifique de l'algorithme ou du comportement.

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!

Déclaration:
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