Maison > développement back-end > C++ > le corps du texte

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

WBOY
Libérer: 2024-06-06 16:16:17
original
507 Les gens l'ont consulté

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;
};
Copier après la connexion

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; }
};
Copier après la connexion

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;
};
Copier après la connexion

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;
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!