本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解观察者模式的动机,掌握该模式的结构;
2、能够利用观察者模式解决实际问题。
[实验任务一]:股票提醒
当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。
1. 提交源代码;
2. #include <iostream>
3. #include <vector>
4. using namespace std;
5.
6. //抽象观察者类
7. class Observer{
8. public:
9. virtual void up_update(){}
10. virtual void down_update(){}
11. };
12. //抽象物体类
13. class Subject{
14. protected:
15. vector<Observer*> ob;
16. public:
17. void attach(Observer *observer){
18. ob.push_back(observer);
19. }
20. void detach(){
21. ob.pop_back();
22. }
23. virtual void notify(){}
24. };
25. //具体观察者类
26. class PersonObserver: public Observer{
27. public:
28. void up_update(){
29. cout<<"股票上涨,开始买股票"<<endl;
30. }
31. void down_update(){
32. cout<<"股票下跌,股民大哭"<<endl;
33. }
34. };
35. //具体物体来
36. class ConcreteSubject: public Subject{
37. private:
38. string state;
39. public:
40. void setState(string state){
41. this->state = state;
42. }
43. void notify(){
44. for (int i=0; i<ob.size() ; i++) {
45. if(state=="上涨")
46. ob[i]->up_update();
47. else
48. ob[i]->down_update();
49. }
50. }
51. };
52.
53. int main(){
54. ConcreteSubject *subject = new ConcreteSubject();
55. PersonObserver *observer = new PersonObserver();
56.
57. subject->attach(observer);
58. subject->setState("上涨");
59. subject->notify();
60. subject->setState("下跌");
61. subject->notify();
62. }
63.