]>
Commit | Line | Data |
---|---|---|
1 | import abc | |
2 | ||
3 | class WeatherSubject(metaclass=abc.ABCMeta): | |
4 | @abc.abstractmethod | |
5 | def add_observer(self, weather_observer): | |
6 | pass | |
7 | ||
8 | @abc.abstractmethod | |
9 | def remove_observer(self, weather_observer): | |
10 | pass | |
11 | ||
12 | @abc.abstractmethod | |
13 | def do_notify(self): | |
14 | pass | |
15 | ||
16 | ||
17 | class WeatherObserver(metaclass=abc.ABCMeta): | |
18 | @abc.abstractmethod | |
19 | def do_update(self, temperature): | |
20 | pass | |
21 | ||
22 | ||
23 | class WeatherStation(WeatherSubject): | |
24 | def __init__(self, temperature): | |
25 | self.observers = [] | |
26 | self.temperature = temperature | |
27 | ||
28 | def add_observer(self, weather): | |
29 | self.observers.append(weather) | |
30 | ||
31 | def remove_observer(self, weather): | |
32 | self.observers.remove(weather) | |
33 | ||
34 | def do_notify(self): | |
35 | for observer in self.observers: | |
36 | observer.do_update(self.temperature) | |
37 | ||
38 | def set_temperature(self, temperature): | |
39 | print("Weather station setting temperature to %s" % temperature) | |
40 | self.temperature = temperature | |
41 | self.do_notify() | |
42 | ||
43 | ||
44 | class WeatherCustomer1(WeatherObserver): | |
45 | def do_update(self, temperature): | |
46 | print("Weather customer 1 just found out the temperature is: %s" % temperature) | |
47 | ||
48 | ||
49 | class WeatherCustomer2(WeatherObserver): | |
50 | def do_update(self, temperature): | |
51 | print("Weather customer 2 just found out the temperature is: %s" % temperature) | |
52 | ||
53 | ||
54 | if __name__ == '__main__': | |
55 | station = WeatherStation(33) | |
56 | ||
57 | wc1 = WeatherCustomer1() | |
58 | wc2 = WeatherCustomer2() | |
59 | station.add_observer(wc1) | |
60 | station.add_observer(wc2) | |
61 | ||
62 | station.set_temperature(34) | |
63 | station.remove_observer(wc1) | |
64 | station.set_temperature(35) |