페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#5456
인터랙티브

옵저버(Observer) 패턴 1s 32MB

문제

옵저버(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

로그인해야 코드를 작성할 수 있어요.