Skip to content

Instantly share code, notes, and snippets.

@seppeljordan
Created September 15, 2019 21:01
Show Gist options
  • Save seppeljordan/0ec576895afd84bc5b980961db2ce481 to your computer and use it in GitHub Desktop.
Save seppeljordan/0ec576895afd84bc5b980961db2ce481 to your computer and use it in GitHub Desktop.
from abc import ABCMeta, abstractmethod
from typing import Set
class Observer(metaclass=ABCMeta):
@abstractmethod
def notify(self, volume: int) -> None:
pass
class Store:
def __init__(self) -> None:
self.volume_observers: Set[Observer] = set()
self.volume = 0
def register_volume_observer(self, observer: Observer) -> None:
self.volume_observers.add(observer)
def _notify_volume(self) -> None:
for observer in self.volume_observers:
observer.notify(self.volume)
def change_volume(self, new_value: int) -> None:
self.volume = new_value
self._notify_volume()
class VolumeLogger(Observer):
def notify(self, volume: int) -> None:
print(volume)
def main() -> None:
store = Store()
volume_logger = VolumeLogger()
store.register_volume_observer(volume_logger)
store.change_volume(1)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment