Head first笔记二:观察者模式
来源:互联网 发布:adobeacrobat9pro mac 编辑:程序博客网 时间:2024/06/16 02:08
Headfirst Java代码
public interface Subject {public void registerObserver(Observer o);public void removeObserver(Observer o);public void notifyObservers();}public interface Observer {public void update(float temp, float humidity, float pressure);}public interface DisplayElement {public void display();}public class WeatherData implements Subject {private ArrayList observers;private float temperature;private float humidity;private float pressure;public WeatherData() {observers = new ArrayList();}public void registerObserver(Observer o) {observers.add(o);}public void removeObserver(Observer o) {int i = observers.indexOf(o);if (i >= 0) {observers.remove(i);}}public void notifyObservers() {for (int i = 0; i < observers.size(); i++) {Observer observer = (Observer)observers.get(i);observer.update(temperature, humidity, pressure);}}public void measurementsChanged() {notifyObservers();}public void setMeasurements(float temperature, float humidity, float pressure) {this.temperature = temperature;this.humidity = humidity;this.pressure = pressure;measurementsChanged();}// other WeatherData methods here}public class CurrentConditionsDisplay implements Observer, DisplayElement {private float temperature;private float humidity;private Subject weatherData;public CurrentConditionsDisplay(Subject weatherData) {this.weatherData = weatherData;weatherData.registerObserver(this);}public void update(float temperature, float humidity, float pressure) {this.temperature = temperature;this.humidity = humidity;display();}public void display() {System.out.println(“Current conditions: “ + temperature+ “F degrees and “ + humidity + “% humidity”);}}public class WeatherStation {public static void main(String[] args) {WeatherData weatherData = new WeatherData();CurrentConditionsDisplay currentDisplay =new CurrentConditionsDisplay(weatherData);StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData);ForecastDisplay forecastDisplay = new ForecastDisplay(weatherData);weatherData.setMeasurements(80, 65, 30.4f);weatherData.setMeasurements(82, 70, 29.2f);weatherData.setMeasurements(78, 90, 29.2f);}}
C++ 例子:
#include <iostream>#include <list>using namespace std; class Observer{public: virtual void Update(int) = 0;}; class Subject{public: virtual void Attach(Observer *) = 0; virtual void Detach(Observer *) = 0; virtual void Notify() = 0;}; class ConcreteObserver : public Observer{public: ConcreteObserver(Subject *pSubject) : m_pSubject(pSubject){} void Update(int value) { cout<<"ConcreteObserver get the update. New State:"<<value<<endl; } private: Subject *m_pSubject;}; class ConcreteObserver2 : public Observer{public: ConcreteObserver2(Subject *pSubject) : m_pSubject(pSubject){} void Update(int value) { cout<<"ConcreteObserver2 get the update. New State:"<<value<<endl; } private: Subject *m_pSubject;}; class ConcreteSubject : public Subject{public: void Attach(Observer *pObserver); void Detach(Observer *pObserver); void Notify(); void SetState(int state) { m_iState = state; } private: std::list<Observer *> m_ObserverList; int m_iState;}; void ConcreteSubject::Attach(Observer *pObserver){ m_ObserverList.push_back(pObserver);} void ConcreteSubject::Detach(Observer *pObserver){ m_ObserverList.remove(pObserver);} void ConcreteSubject::Notify(){ std::list<Observer *>::iterator it = m_ObserverList.begin(); while (it != m_ObserverList.end()) { (*it)->Update(m_iState); ++it; }} int main(){ // Create Subject ConcreteSubject *pSubject = new ConcreteSubject(); // Create Observer Observer *pObserver = new ConcreteObserver(pSubject); Observer *pObserver2 = new ConcreteObserver2(pSubject); // Change the state pSubject->SetState(2); // Register the observer pSubject->Attach(pObserver); pSubject->Attach(pObserver2); pSubject->Notify(); // Unregister the observer pSubject->Detach(pObserver); pSubject->SetState(3); pSubject->Notify(); delete pObserver; delete pObserver2; delete pSubject;}
0 0
- Head first笔记二:观察者模式
- Head First 设计模式笔记--观察者模式
- Head First 之观察者模式笔记
- Head First: 观察者模式
- Head First 观察者模式
- 《Head First 设计模式》阅读笔记(二)——观察者模式
- head first设计模式学习笔记(二)——观察者模式 C++实现
- Head First设计模式:(二)观察者模式
- head first 设计模式总结(二)观察者模式
- Head First 设计模式(二) 观察者模式
- Head First 设计模式(二)观察者模式
- 设计模式(二)观察者模式(Head First)
- 《Head First Design Patterns》笔记二:观察者模式(Observer Pattern)
- Head First 设计模式学习笔记(2)--观察者模式
- Head First 设计模式(2)- 观察者模式 笔记
- 《Head First 设计模式》学习笔记之观察者模式
- Head First设计模式学习笔记——观察者模式
- 《Head first设计模式》学习笔记 - 观察者模式
- setInterval设置停止的次数和时间
- 关于用 OC 来冒泡排序的注意地方
- android动画之帧动画(drawable animation)和补间动画(view animation)
- GIT_1
- @RenderBody、@RenderSection、@RenderPage、Html.RenderPartial、Html.RenderAction的作用和区别
- Head first笔记二:观察者模式
- 2015年最后一个月的英语小结
- Swift 字符串
- byobu在SecureCRT 使用时 command line 有乱码
- 如何集成inmobi到android
- Swift 元祖类型
- 个人学习-java-循环注意事项
- tmux使用教程(快捷键)
- CentOS6.5中Cmake 安装