Heim  >  Artikel  >  Backend-Entwicklung  >  Anwendungsfälle von Entwurfsmustern in C++

Anwendungsfälle von Entwurfsmustern in C++

WBOY
WBOYOriginal
2024-06-01 20:14:00891Durchsuche

Ja, Entwurfsmuster werden in C++ häufig verwendet. Das Beobachtermuster ist eine Eins-zu-Eins-Beziehung, bei der ein Objekt (der Prinzipal) abhängige Objekte (die Beobachter) verwaltet und sie über Zustandsänderungen benachrichtigt. In diesem Beispiel benachrichtigen Wetterdaten (das Subjekt) die Anzeige (den Beobachter) über Zustandsänderungen und aktualisieren so die Anzeige. Entwurfsmuster bieten bewährte Lösungen für die Erstellung flexiblerer und wartbarerer Codes.

Anwendungsfälle von Entwurfsmustern in C++

Anwendungsfälle von Entwurfsmustern in C++

Entwurfsmuster sind wiederverwendbare Lösungen für häufige Softwareentwicklungsprobleme. Sie bieten eine Reihe bewährter Best Practices, die Entwicklern dabei helfen können, flexibleren und wartbareren Code zu erstellen.

Beobachtermuster

Das Beobachtermuster definiert eine Eins-zu-Eins-Beziehung, bei der ein Objekt (Subjekt) eine Reihe abhängiger Objekte (Beobachter) verwaltet. Wenn sich der Zustand des Subjekts ändert, werden alle Beobachter benachrichtigt, damit sie entsprechend aktualisieren können.

Implementierung:

#include <iostream>
#include <vector>

class Subject {
public:
    void addObserver(Observer* obs) { observers.push_back(obs); }
    void removeObserver(Observer* obs) { observers.erase(observers.begin() + find(observers.begin(), observers.end(), obs)); }
    void notifyObservers() { for (Observer* obs : observers) obs->update(); }
    int getSubjectState() const { return subjectState; }
    void setSubjectState(int state) { subjectState = state; notifyObservers(); }

private:
    int subjectState;
    std::vector<Observer*> observers;
};

class Observer {
public:
    virtual void update() = 0;
};

class Observer1 : public Observer {
public:
    void update() { std::cout << "Observer 1 notified, subject state: " << subject->getSubjectState() << "\n"; }
    Subject* subject;
};

class Observer2 : public Observer {
public:
    void update() { std::cout << "Observer 2 notified, subject state: " << subject->getSubjectState() << "\n"; }
    Subject* subject;
};

int main() {
    Subject subject;
    Observer1 observer1;
    observer1.subject = &subject;
    Observer2 observer2;
    observer2.subject = &subject;

    subject.addObserver(&observer1);
    subject.addObserver(&observer2);

    subject.setSubjectState(10);
    subject.setSubjectState(20);

    return 0;
}

Ausgabe:

Observer 1 notified, subject state: 10
Observer 2 notified, subject state: 10
Observer 1 notified, subject state: 20
Observer 2 notified, subject state: 20

In diesem Beispiel Subject 是天气数据,Observer 是两个显示屏。当天气数据发生变化(setSubjectState)时,它会通知显示屏(notifyObservers),显示屏会更新其显示的内容(update).

Fazit:

Entwurfsmuster bieten bewährte Lösungen, die Entwicklern helfen können, flexibleren und wartbareren Code zu erstellen. Das Observer-Muster ist nur eines von vielen Entwurfsmustern, die in C++ und anderen Sprachen weit verbreitet sind.

Das obige ist der detaillierte Inhalt vonAnwendungsfälle von Entwurfsmustern in C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn