Pythonで最低限のObserverパターンを実装する
 Author: mito.shimada

Observerパターンとは

Observerパターンとは、監視対象が変化した時に監視者に通知するデザインパターンのことである。

  • stateの変化を監視して通知できる

  • イベントの発火元と処理をする側を疎結合にできる

といった恩恵を受けることができ、pubsubに近い印象を受けた。

イベントによって状態を更新するObserverと、そのObserverの登録や削除、イベントの通知を行うSubjectから構成される。

Subjectは登録されたObserverに対して通知を行うだけでよく、
Observerが何であるかということに関心を持たなくて良い。

と小難しく書いたが、要はSubjectとObserverに分けることでイベントの対象とイベントの発行が疎結合に出来るデザインパターン。

他に、Observerの状態に一貫性を持たせることが出来るという効用もあるようです。

https://qiita.com/k-motoyan/items/5ef106f669929e1cfcca

サンプルコード

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'

参考

https://qiita.com/Algos/items/ba9c6ed52380b57aecac

https://qiita.com/k-motoyan/items/5ef106f669929e1cfcca