Pythonで最低限のObserverパターンを実装する
Author: 水卜
Author: 水卜
Observerパターンとは、監視対象が変化した時に監視者に通知するデザインパターンのことである。
stateの変化を監視して通知できる
イベントの発火元と処理をする側を疎結合にできる
といった恩恵を受けることができ、pubsubに近い印象を受けた。
イベントによって状態を更新するObserverと、そのObserverの登録や削除、イベントの通知を行うSubjectから構成される。
Subjectは登録されたObserverに対して通知を行うだけでよく、
Observerが何であるかということに関心を持たなくて良い。と小難しく書いたが、要はSubjectとObserverに分けることでイベントの対象とイベントの発行が疎結合に出来るデザインパターン。
他に、Observerの状態に一貫性を持たせることが出来るという効用もあるようです。
class Subject:
def __init__(self, observer):
self.__state = 'stop'
self.observers = []
def notify(self):
for observer in self.observers:
observer.on_status_changed()
def add_observer(self, observer):
self.observers.append(observer)
@property
def state(self):
return self.__state
@state.setter
def state(self, state):
if self.__state != state:
self.__state = state
self.notify
class Observer:
def on_status_changed(self):
print("state changed")
if __name__ == "__main__":
CarA = Subject()
UserA = Observer()
CarA.state = 'drive'