Advertisement
Guest User

Untitled

a guest
May 29th, 2015
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. class Observable{
  8. public:
  9.     int info;
  10.     vector<class Observer*> myObservers;
  11. public:
  12.     virtual void attach(Observer* newObs) = 0;
  13.     virtual void detach(Observer* someObs) = 0;
  14.     virtual void notify() = 0;
  15.     virtual int getInfo() = 0;
  16.     virtual void setInfo(int x) = 0;
  17. };
  18.  
  19. class Observer{
  20. public:
  21.     Observable* myObs;
  22.     virtual void update() = 0;
  23.     virtual void printMe() = 0;
  24. };
  25.  
  26. class concreteObservable: public Observable{
  27. public:
  28.     concreteObservable(){
  29.         info = 0;
  30.         myObservers.clear();
  31.     }
  32.     void setInfo(int x){
  33.         info = x;
  34.         notify();
  35.     }
  36.    
  37.     int getInfo(){
  38.         return info;
  39.     }
  40.     void attach(Observer* newObs){
  41.         this->myObservers.push_back(newObs);
  42.     }
  43.     void detach(Observer* someObs){
  44.         vector<Observer*> ::iterator i;
  45.         for (i = myObservers.begin(); i != myObservers.end(); i++){
  46.             if (*i == someObs)
  47.                 myObservers.erase(i);
  48.         }
  49.     }
  50.     void notify(){
  51.         vector<Observer*> ::iterator i;
  52.         for (i = myObservers.begin(); i != myObservers.end(); i++)
  53.             (*i)->update();
  54.     }
  55. };
  56.  
  57. class ObserverA : public Observer{
  58.     int obsInfo;
  59.     void update(){
  60.         obsInfo = myObs->getInfo();
  61.     }
  62.    
  63. public:
  64.     ObserverA(Observable* someObs){
  65.         myObs = someObs;
  66.     }
  67.     void printMe(){
  68.         printf("%d is my value as ObsA\n", obsInfo);
  69.     }
  70. };
  71.  
  72. class ObserverB : public Observer{
  73.     int obsInfo;
  74.     void update(){
  75.         obsInfo = myObs->getInfo()+1;
  76.     }
  77.    
  78. public:
  79.     ObserverB(Observable* someObs){
  80.         myObs = someObs;
  81.     }
  82.     void printMe(){
  83.         printf("%d is my value as ObsB\n", obsInfo);
  84.     }
  85. };
  86.  
  87. void main(){
  88.     concreteObservable* Integer = new concreteObservable();
  89.     ObserverA A(Integer);
  90.     ObserverB B(Integer);
  91.     Integer->attach(&A);
  92.     Integer->attach(&B);
  93.     printf("\nIntializam cu 5\n");
  94.     Integer->setInfo(5);
  95.     A.printMe();
  96.     B.printMe();
  97.     printf("\n\nInitializam cu 10\n");
  98.     Integer->setInfo(10);
  99.     A.printMe();
  100.     B.printMe();
  101.     int n; cin >> n;
  102.  
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement