from deco import print_fn_name
class Subject(object):
def __init__(self):
self._observers = []
def register_observer(self, observer):
self._observers.append(observer)
def remove_observer(self, observer):
if observer in self._observers:
self._observers.remove(observer)
def notify_observer(self):
for obs in self._observers:
obs.update()
class Observer(object):
def __init__(self, subject):
self._subject = subject
subject.register_observer(self)
def update(self):
pass
class DisplayElement(object):
def display(self):
pass
class WeatherData(Subject):
_observers = None
_temperature = 0.0
_humidity = 0.0
_pressure = 0.0
def notify_observer(self):
for obs in self._observers:
obs.update(
self._temperature,
self._humidity,
self._pressure
)
def measurements_changed(self):
self.notify_observer()
def set_measurements(self, arg_temp, arg_hmd, arg_psur):
self._temperature = arg_temp
self._humidity = arg_hmd
self._pressure = arg_psur
self.measurements_changed()
class CurrentConditionDisplay(Observer, DisplayElement):
_tmperature = 0.0
_humidity = 0.0
_pressure = 0.0
_weather_data = None
def update(self, temp, humidity, pressure):
self._temperature = temp
self._humidity = humidity
self._pressure = pressure
def display(self):
pnt = u"現在の気象"
pnt += u"\n温度: " + str(self._temperature)
pnt += u"\n湿度: " + str(self._humidity)
pnt += u"\n気圧: " + str(self._pressure)
print pnt
class WeatherStation(object):
@staticmethod
def display():
weather_data = WeatherData()
current_display = CurrentConditionDisplay(weather_data)
weather_data.set_measurements(arg_temp=20.2, arg_hmd=52, arg_psur=1050)
current_display.display()
if __name__ == '__main__':
WeatherStation.display()