問題
옵저버(Observer) 패턴이란 주체에 종속된 관찰자(옵저버)들에게 주체가 업데이트 되었음을 자동으로 알리는 디자인 패턴으로 분산 이벤트 처리 시스템을 구현 하는데 사용되고는 한다.
즉, 옵저버는 객체를 지속적으로 관찰하며 업데이트가 있는지를 살펴보는 것이며, 하나의 객체와 그 객체의 상태 변화를 갱신받는 여러 객체들의 일대다 관계(one-to-many relationship)의 디자인 패턴이다.
옵저버 패턴의 특징은 느슨한 결합(Loose Coupling)으로 서로 아는 정보는 적지만, 커뮤니케이션이 가능하다는 것이다.

다이어그램을 살펴보면 대략적으로 어떠한 관계도가 형성되었는지 알 수 있다.
여기서 ConcreteObserver는 실제로 구독을 하는 객체라고 볼 수 있다.
이를 코드로 풀어보자.
from abc import ABCMeta, abstractmethod
class Subject(metaclass=ABCMeta):
@abstractmethod
def register_observer(self):pass
@abstractmethod
def remove_observer(self):pass
@abstractmethod
def notify_observer(self):pass
class Observer(metaclass=ABCMeta):
@abstractmethod
def update(self):pass
class ConcreteSubject(Subject):
def __init__(self):
self.state = ""
self.observer_list = []
def register_observer(self,observer):
self.observer_list.append(observer)
def remove_observer(self,observer):
self.observer_list.remove(observer)
# 옵저버에게 알림 -> 구독하는 옵저버들의 update()실행
def notify_observer(self):
for obs in self.observer_list:
obs.update()
class ConcreteObserver(Observer):
def update(self):
pass來源
klee