ホームページ  >  記事  >  バックエンド開発  >  C++でのデザインパターンの適用事例

C++でのデザインパターンの適用事例

WBOY
WBOYオリジナル
2024-06-01 20:14:00836ブラウズ

はい、デザインパターンは C++ で広く使用されています。オブザーバー パターンは、1 つのオブジェクト (プリンシパル) が依存オブジェクト (オブザーバー) を管理し、状態の変化を通知する 1 対 1 の関係です。この例では、気象データ(主体)によって状態の変化が表示部(観察者)に通知され、表示が更新される。デザイン パターンは、より柔軟で保守しやすいコードを作成するための実証済みのソリューションを提供します。

C++でのデザインパターンの適用事例

C++ のデザイン パターンの適用例

デザイン パターンは、一般的なソフトウェア開発の問題に対する再利用可能なソリューションです。これらは、開発者がより柔軟で保守しやすいコードを作成するのに役立つ一連の実証済みのベスト プラクティスを提供します。

Observer パターン

Observer パターンは、1 つのオブジェクト (サブジェクト) が一連の依存オブジェクト (オブザーバー) を管理する 1 対 1 の関係を定義します。サブジェクトの状態が変化すると、すべてのオブザーバーに通知されるため、オブザーバーはそれに応じて更新できます。

実装:

#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;
}

出力:

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

この例では、Subject 是天气数据,Observer 是两个显示屏。当天气数据发生变化(setSubjectState)时,它会通知显示屏(notifyObservers),显示屏会更新其显示的内容(update)。

結論:

デザインパターンは、開発者がより柔軟で保守しやすいコードを作成するのに役立つ実証済みのソリューションを提供します。 Observer パターンは、C++ やその他の言語で広く使用されている多くの設計パターンの 1 つにすぎません。

以上がC++でのデザインパターンの適用事例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。