//Abstrakcyjny Obserwowany
class Obserwowany {
	public:
	/**
	 * dodaje obserwatora o do listy obserwatorow
	 */
	void dodaj(Obserwator* o) {
		//dodaj obserwatora o do listy obserwatorow
	}
	/**
	 * powiadamia kazdego obserwatora o zmianie stanu
	 */
	void powiadom(){
		//dla każdego o w obserwatorzy wywołaj o->odswiez()
	}
	/**
	 * abstrakcyjny destruktor
	 */
	virtual ~Obserwowany() {
		;
	};
	private:
	/**
	 * lista obserwatorow
	 */
	std::vector<Obserwator*> obserwatorzy_;
};
//Obserwowany konkretny
class ObserwowanyKonkretny : public Obserwowany {
	public:
	/**
	 * podaje stan obiektu obserwowanego
	 */
	StanObserwowanego podaj_stan() {
		//zwroc stan_
	}
	private:
	/**
	 * opisuje stan obiektu obserwowanego
	 */
	StanObserwowanego* stan_;
};
//Abstrakcyjny Obserwator
class Obserwator {
	public:
	/**
	 * powiadamia obserwatora o zajsciu zmiany stanu w obiekcie obserwowanym
	 */
	virtual void odswiez() = 0;
	/**
	 * abstrakcyjny destruktor
	 */
	virtual ~Obserwator() {
		;
	}
};
//Obserwator konkretny
class ObserwatorKonkretny : public Obserwator {
	public:
	/**
	 * powiadamia obserwatora o zajsciu zmiany stanu w obiekcie obserwowanym
	 */
	void odswiez() {
		/* uzyskaj aktualny stan obiektu obserwowanego */
	}
};
