-
-
Notifications
You must be signed in to change notification settings - Fork 131
/
Copy pathdata_model.py
26 lines (20 loc) · 803 Bytes
/
data_model.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
"A Data Model that observes the Data Controller"
from interface_data_model import IDataModel
from data_controller import DataController
class DataModel(IDataModel):
"A Subject (a.k.a Observable)"
def __init__(self):
self._observers = {}
self._counter = 0
# subscribing to an external hypothetical data controller
self._data_controller = DataController()
self._data_controller.subscribe(self)
def subscribe(self, observer):
self._counter = self._counter + 1
self._observers[self._counter] = observer
return self._counter
def unsubscribe(self, observer_id):
self._observers.pop(observer_id)
def notify(self, data):
for observer in self._observers:
self._observers[observer].notify(data)