Gof from wiki: add Observer pattern