#ifndef OBS_H
#define OBS_H

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>


typedef int Info;

class Observable;

class Observateur {
 protected:
    std::vector<Observable*> m_list;
    virtual ~Observateur() = 0;
 public:
    virtual void Update(const Observable* observable) const ;

    void AddObs(Observable* obs);
    void DelObs(Observable* obs);
};

class Observable {
  std::vector<Observateur*> m_list;
  
public:
  void AddObs( Observateur* obs);
  void DelObs(Observateur* obs);
  
  virtual Info Statut(void) const =0;
  virtual ~Observable();
protected:
  void Notify(void);

};

class Barometre : public Observable {
 
};

class Thermometre : public Observable {
 
};

class MeteoFrance : public Observateur {
};

#endif
