Skip to content

Instantly share code, notes, and snippets.

@okanyenigun
Created September 12, 2022 14:57
Show Gist options
  • Save okanyenigun/b59c00f02e52f9646d3fd14214b8c637 to your computer and use it in GitHub Desktop.
Save okanyenigun/b59c00f02e52f9646d3fd14214b8c637 to your computer and use it in GitHub Desktop.
observer design pattern
from abc import ABC, abstractmethod
class IObservable(ABC):
@abstractmethod
def subscribe(self, observer):
"""subscription"""
@abstractmethod
def unsubscribe(self, observer):
"""unsubscription"""
@abstractmethod
def update(self, message):
"""update method"""
class Reuters(IObservable):
def __init__(self):
self._subscribers = set()
def subscribe(self, observer):
self._subscribers.add(observer)
return
def unsubscribe(self, observer):
self._subscribers.remove(observer)
return
def update(self, message):
for observer in self._subscribers:
observer.update(message)
class IObserver(ABC):
@abstractmethod
def update(self, message):
""""""
class Cnn(IObserver):
def update(self, message):
print("Breaking News: ", message)
return
class Fox(IObserver):
def update(self, message):
print("The Ultimate Breaking News: ", message)
class Archiever(IObserver):
def __init__(self):
self.db = []
def update(self, message):
self._add_archieve(message)
print(f"{message} is added to database.")
def _add_archieve(self,message):
self.db.append(message)
return
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment