Skip to content

Commit 059657f

Browse files
committed
新增设计模式测试
1 parent 240f6f9 commit 059657f

1 file changed

Lines changed: 76 additions & 0 deletions

File tree

test/design_pattern/observer.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#!/usr/bin/env python
2+
# encoding: utf-8
3+
4+
"""
5+
@author: zhanghe
6+
@software: PyCharm
7+
@file: observer.py
8+
@time: 2017/6/12 下午6:06
9+
"""
10+
11+
12+
class AbstractSubject(object):
13+
def register(self, listener):
14+
raise NotImplementedError("Must subclass me")
15+
16+
def de_register(self, listener):
17+
raise NotImplementedError("Must subclass me")
18+
19+
def notify_listeners(self, event):
20+
raise NotImplementedError("Must subclass me")
21+
22+
23+
class Listener(object):
24+
def __init__(self, name, subject):
25+
self.name = name
26+
subject.register(self)
27+
28+
def notify(self, event):
29+
print self.name, "received event", event
30+
31+
32+
class Subject(AbstractSubject):
33+
def __init__(self):
34+
self.listeners = []
35+
self.data = None
36+
37+
def get_user_action(self):
38+
self.data = raw_input('Enter something to do:')
39+
return self.data
40+
41+
# Implement abstract Class AbstractSubject
42+
43+
def register(self, listener):
44+
self.listeners.append(listener)
45+
46+
def de_register(self, listener):
47+
self.listeners.remove(listener)
48+
49+
def notify_listeners(self, event):
50+
for listener in self.listeners:
51+
listener.notify(event)
52+
53+
54+
if __name__ == "__main__":
55+
# make a subject object to spy on
56+
subject_obj = Subject()
57+
58+
# register two listeners to monitor it.
59+
listenerA = Listener("<listener A>", subject_obj)
60+
listenerB = Listener("<listener B>", subject_obj)
61+
62+
# simulated event
63+
subject_obj.notify_listeners("<event 1>")
64+
# outputs:
65+
# <listener A> received event <event 1>
66+
# <listener B> received event <event 1>
67+
68+
action = subject_obj.get_user_action()
69+
subject_obj.notify_listeners(action)
70+
# Enter something to do:hello
71+
# outputs:
72+
# <listener A> received event hello
73+
# <listener B> received event hello
74+
75+
76+
# https://zh.wikipedia.org/wiki/观察者模式

0 commit comments

Comments
 (0)