Katsushiro

Design Pattern - Observer

May 31st, 2015
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.87 KB | None | 0 0
  1. # Observer podle diagramu http://voho.cz/wiki/observer/
  2.  
  3. from abc import ABCMeta, abstractmethod
  4.  
  5. # Abstraktni Observer
  6. class Observer():
  7.     __metaclass__=ABCMeta
  8.  
  9.     @abstractmethod
  10.     def update():
  11.         pass
  12.    
  13. # Konkrenti observery
  14. class ConcreteObserver1(Observer):
  15.     def __init__(self):
  16.         print("Byl zalozen objekt ConcreteObserver1.")
  17.    
  18.     def update(self):
  19.         print("ConcreteObserver1: Detekovana udalost!")
  20.    
  21. class ConcreteObserver2(Observer):
  22.     def __init__(self):
  23.         print("Byl zalozen objekt ConcreteObserver2.")
  24.    
  25.     def update(self):
  26.         print("ConcreteObserver2: Detekovana udalost!")
  27.  
  28. # Abstraktni Observable
  29. class Observable():
  30.     __metaclass__=ABCMeta
  31.    
  32.     observers = []
  33.  
  34.     def attach(self, obs):
  35.         Observable.observers.append(obs)
  36.    
  37.     def detach(self, obs):
  38.         pass
  39.    
  40.     def notify(self):
  41.         for observer in Observable.observers:
  42.             observer.update()
  43.  
  44. class ConcreteObservable(Observable):
  45.     '''
  46.    Pozorovany objekt - vyuziva metody abstraktni tridy Observable
  47.    '''
  48.     def __init__(self):
  49.         print("Byl zalozen objekt ConcreteObservable.")
  50.    
  51. class Client():
  52.     '''
  53.    Klientsky objekt - jakykoliv obj, ktery chce nejaky jiny pozorovat
  54.    '''
  55.    
  56.     def __init__(self, obs):
  57.         self.concreteObservable = obs
  58.        
  59.         print("Byl zalozen objekt Client.")
  60.    
  61.     def action(self):
  62.         self.concreteObservable.notify()
  63.    
  64. if __name__ == '__main__':
  65.     concreteObservable = ConcreteObservable()
  66.     concreteObserver1 = ConcreteObserver1()
  67.     concreteObserver2 = ConcreteObserver2()
  68.    
  69.     client = Client(concreteObservable)
  70.    
  71.     # Test upozorneni - pridam oba observery
  72.     concreteObservable.attach(concreteObserver1)
  73.     concreteObservable.attach(concreteObserver2)
  74.    
  75.     client.action()
Advertisement
Add Comment
Please, Sign In to add comment