-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathobserver.py
More file actions
101 lines (74 loc) · 2.48 KB
/
observer.py
File metadata and controls
101 lines (74 loc) · 2.48 KB
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
"""
Created on 15/03/2016
@author: bruno.martins
"""
import abc
class TemperatureSubject(object):
"""
classdocs
"""
thermometers = []
def __init__(self):
self.__temperature = None
@property
def temperature(self):
"""Returns the current Celsius temperature"""
return self.__temperature
@temperature.setter
def temperature(self, value):
"""Sets the current temperature in Celsius"""
self.__temperature = value
self.notify_thermometers()
def notify_thermometers(self):
"""Notify all observer"""
for thermometer in self.thermometers:
thermometer.update()
def attach(self, thermometer):
"""attach observer"""
self.thermometers.append(thermometer)
def deatach(self, thermometer):
"""detach obsrever"""
self.thermometers.remove(thermometer)
class Thermometer(object):
"""
Abstract class to thermometer
"""
__metaclass__ = abc.ABCMeta
temperature = 0
@abc.abstractmethod
def update(self):
"""updates the temperature in thermometer"""
raise NotImplementedError
class CelsiusThermometer(Thermometer):
"""
Celsius thermometer
"""
temperature_subject = None
def __init__(self, temperature_subject):
self.temperature_subject = temperature_subject
temperature_subject.attach(self)
def update(self):
self.temperature = self.temperature_subject.temperature
print('Celsius:' + str(self.temperature))
class FahrenheitThermometer(Thermometer):
"""
Fahrenheit thermometer
"""
temperature_subject = None
def __init__(self, temperature_subject):
self.temperature_subject = temperature_subject
temperature_subject.attach(self)
def update(self):
self.temperature = self.temperature_subject.temperature * 1.8000 + 32.00
print('Fahrenheit:' + str(self.temperature))
class KelvinThermometer(Thermometer):
"""
Kelvin thermometer
"""
temperature_subject = None
def __init__(self, temperature_subject):
self.temperature_subject = temperature_subject
temperature_subject.attach(self)
def update(self):
self.temperature = self.temperature_subject.temperature + 273.15
print('Kelvin:' + str(self.temperature))