Created
September 15, 2019 21:01
-
-
Save seppeljordan/0ec576895afd84bc5b980961db2ce481 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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