Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Observer podle diagramu http://voho.cz/wiki/observer/
- from abc import ABCMeta, abstractmethod
- # Abstraktni Observer
- class Observer():
- __metaclass__=ABCMeta
- @abstractmethod
- def update():
- pass
- # Konkrenti observery
- class ConcreteObserver1(Observer):
- def __init__(self):
- print("Byl zalozen objekt ConcreteObserver1.")
- def update(self):
- print("ConcreteObserver1: Detekovana udalost!")
- class ConcreteObserver2(Observer):
- def __init__(self):
- print("Byl zalozen objekt ConcreteObserver2.")
- def update(self):
- print("ConcreteObserver2: Detekovana udalost!")
- # Abstraktni Observable
- class Observable():
- __metaclass__=ABCMeta
- observers = []
- def attach(self, obs):
- Observable.observers.append(obs)
- def detach(self, obs):
- pass
- def notify(self):
- for observer in Observable.observers:
- observer.update()
- class ConcreteObservable(Observable):
- '''
- Pozorovany objekt - vyuziva metody abstraktni tridy Observable
- '''
- def __init__(self):
- print("Byl zalozen objekt ConcreteObservable.")
- class Client():
- '''
- Klientsky objekt - jakykoliv obj, ktery chce nejaky jiny pozorovat
- '''
- def __init__(self, obs):
- self.concreteObservable = obs
- print("Byl zalozen objekt Client.")
- def action(self):
- self.concreteObservable.notify()
- if __name__ == '__main__':
- concreteObservable = ConcreteObservable()
- concreteObserver1 = ConcreteObserver1()
- concreteObserver2 = ConcreteObserver2()
- client = Client(concreteObservable)
- # Test upozorneni - pridam oba observery
- concreteObservable.attach(concreteObserver1)
- concreteObservable.attach(concreteObserver2)
- client.action()
Advertisement
Add Comment
Please, Sign In to add comment