-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path046observerPattern.py
38 lines (28 loc) · 1.21 KB
/
046observerPattern.py
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
class Subject:
def __init__(self):
self.__observers = []
def attach(self, observer):
self.__observers.append(observer)
print(f'New observer: {observer}, total observers: {len(self.__observers)}')
def detach(self, observer):
self.__observers.remove(observer)
def notify(self, *args, **kwargs):
for observer in self.__observers:
observer.update(self, *args, **kwargs)
## Subject internal state should be changed via methods that call notify on changes
class Observer:
def update(self, subject, *args, **kwargs):
print(f'update() {self} was called by: {subject}', args, kwargs)
somethingObservable = Subject()
someObserver = Observer()
somethingObservable.attach(someObserver)
somethingObservable.notify()
somethingObservable.notify('second update')
somethingObservable.notify('and another one update')
somethingObservable.detach(someObserver)
somethingObservable.notify('no one will hear this')
somethingObservable.attach(someObserver)
somethingObservable.notify('hello again')
secondObserver = Observer()
somethingObservable.attach(secondObserver)
somethingObservable.notify('two observers will get this')