Created
June 24, 2016 08:02
-
-
Save itskevinsam/ce21c18fd45bd0e4efb5e6eed01a25c3 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
class ObservableEvent: | |
def __init__(self): | |
self.__observers = [] | |
def register_observer(self, observer): | |
self.__observers.append(observer) | |
def de_register_observer(self, observer): | |
self.__observers.remove(observer) | |
def notify(self, *args, **kwargs): | |
for observer in self.__observers: | |
observer.trigger(*args, **kwargs) | |
class BaseObserver: | |
def __init__(self, *args, **kwargs): | |
observable.register_observer(self) | |
def trigger(self, *args, **kwargs): | |
print ("Invoked "+self.__class__.__name__+" with arguments ", args, kwargs) | |
class GenericObserver(BaseObserver): | |
def __init__(self, observable): | |
super(GenericObserver, self).__init__(observable) | |
class LoggerObserver(BaseObserver): | |
def __init__(self, observable): | |
super(LoggerObserver, self).__init__(observable) | |
class EmailerObserver(BaseObserver): | |
def __init__(self, observable): | |
super(EmailerObserver, self).__init__(observable) | |
class WhatsApperObserver(BaseObserver): | |
def __init__(self, observable): | |
super(WhatsApperObserver, self).__init__(observable) | |
if __name__ == '__main__': | |
observable = ObservableEvent() | |
gen_obs_1 = GenericObserver(observable) | |
print ("Test Single Observer [Generic]") | |
observable.notify("Hello", "World", "Test", "Generic") | |
print ("Test Multiple Observers [Generic, Logger, Email, WhatsApp]") | |
log_obs_1 = LoggerObserver(observable) | |
email_obs_1 = EmailerObserver(observable) | |
whatsapp_obs_1 = WhatsApperObserver(observable) | |
observable.notify("Hello", "World", "Test", "Multiple") | |
print ("Test after removing Generic observer") | |
observable.de_register_observer(gen_obs_1) | |
observable.notify("Hello", "World", "Test", "Multiple") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment