设计模式之观察者模式

观察者模式

定义

定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖都会收到通知并自动更新。

类图

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//被观察者
class Subject{
private:
vector<Observer*> observers;
public:
virtual void registerObserver(Observer* o);
virtual void removeObserver(Observer* o);
virtual void notifyObservers();
}

class ConcreteSubject : public Subject{
public:
void registerObserver(Observer* o){
observers.push_back(o);
}

void removeObserver(Observer* o){
auto it = observers.find(o);
if(it != observers.end()){
observers.erase(it);
}
}

void notifyObservers(){
for(int i = 0; i < observers.size(); ++i){
observers[i]->update();
}
}

//状态已改变
void stateChanged(){
notifyObservers();
}
}

//观察者
class Observer{
public:
virtual void update();
}

class ConcreteObserver : public Observer{
private:
Subject* data;
public:
ConcreteObserver(Subject* subjectData) : data(subjectData){
data->registerObserver(this);
}

void update(){
cout << "Get new data!" << endl;
}
}

理解

用户关注感兴趣的事件,当事件发生变化时,会自动收到通知从而改变自己的状态,而不是主动向事件询问状态。可以实现按键监听。

分享到