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