是的,設計模式在 C++ 中有廣泛應用。觀察者模式是一種一對一關係,其中一個物件(主體)管理依賴物件(觀察者)並通知它們狀態變化。在這個範例中,天氣資料(主體)通知顯示器(觀察者)狀態變化,從而更新顯示內容。設計模式提供了經過驗證的解決方案,以創建更靈活、更可維護的程式碼。
設計模式在C++ 中的應用案例
設計模式是可重複使用的解決方案,用於解決常見的軟體開發問題。它們提供了一組經過驗證的最佳實踐,可以幫助開發者創建更靈活、更可維護的程式碼。
觀察者模式
觀察者模式定義了一對一的關係,其中一個物件(主體)管理一組依賴物件(觀察者)。當主體狀態發生變化時,它會通知所有觀察者,使它們能夠相應地更新。
實作:
#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
)。
結論:
設計模式提供了經過驗證的解決方案,可以幫助開發者建立更靈活、更可維護的程式碼。觀察者模式只是眾多設計模式中的一種,它在 C++ 中和其他語言中都有廣泛的應用。
以上是設計模式在C++中的應用案例的詳細內容。更多資訊請關注PHP中文網其他相關文章!