Maison  >  Article  >  développement back-end  >  Comment implémenter le Strategy Design Pattern en C++ ?

Comment implémenter le Strategy Design Pattern en C++ ?

WBOY
WBOYoriginal
2024-06-06 16:16:17508parcourir

Les étapes pour implémenter le modèle de stratégie en C++ sont les suivantes : définir l'interface de stratégie et déclarer les méthodes qui doivent être exécutées. Créez des classes de stratégie spécifiques, implémentez l'interface respectivement et fournissez différents algorithmes. Utilisez une classe de contexte pour contenir une référence à une classe de stratégie concrète et effectuer des opérations via celle-ci.

Comment implémenter le Strategy Design Pattern en C++ ?

Comment implémenter le modèle de conception de stratégie en C++

Introduction

Le modèle de stratégie est un modèle de conception comportemental qui vous permet de modifier un algorithme ou un comportement au moment de l'exécution sans modifier le code client. Cela vous donne la possibilité de changer d'algorithme sans modifier les références à ceux-ci.

Implémentation du modèle de stratégie

L'implémentation du modèle de stratégie en C++ nécessite plusieurs étapes :

  1. Définir l'interface de base de la stratégie : Il s'agit de la classe de base pour toutes les stratégies, qui déclare les méthodes requises.
  2. Créez des classes de stratégie concrètes : Ces classes implémentent l'interface de stratégie de base et fournissent différents algorithmes ou comportements.
  3. Utiliser une classe de contexte : Il contient une référence à une classe de stratégie concrète et l'utilise pour effectuer des actions spécifiques.

Exemple pratique

Supposons que vous disposiez d'un algorithme de tri qui nécessite différents algorithmes de comparaison. Vous pouvez facilement y parvenir en utilisant Strategy Pattern.

Interface de stratégie de base :

class Comparator {
public:
    virtual bool compare(int a, int b) = 0;
};

Classe de stratégie spécifique :

class AscendingComparator : public Comparator {
public:
    bool compare(int a, int b) override { return a < b; }
};

class DescendingComparator : public Comparator {
public:
    bool compare(int a, int b) override { return a > b; }
};

Classe de contexte :

class Sorter {
public:
    Sorter(Comparator* comparator) : comparator(comparator) {}

    void sort(int* arr, int size) {
        for (int i = 0; i < size - 1; i++) {
            for (int j = i + 1; j < size; j++) {
                if (comparator->compare(arr[i], arr[j])) {
                    std::swap(arr[i], arr[j]);
                }
            }
        }
    }

private:
    Comparator* comparator;
};

Utilisation :

int main() {
    int arr[] = {5, 3, 1, 2, 4};
    int size = sizeof(arr) / sizeof(int);

    Sorter sorter(new AscendingComparator());
    sorter.sort(arr, size);

    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";  // Output: 1 2 3 4 5
    }
    cout << "\n";

    sorter.setComparator(new DescendingComparator());
    sorter.sort(arr, size);

    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";  // Output: 5 4 3 2 1
    }
    cout << "\n";

    return 0;
}

Dans cet exemple, Sorter 类可以根据提供的比较策略对数组进行排序。通过更换比较策略,我们可以轻松地在升序和降序排序之间切换,而无需修改 Sorter logique.

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