It can be used as an example on how to implement this yourself, but I find the class highly unusable - if you want to use it, your classes must become subclasses of Observable. It should have been an interface instead, with a default implementation like AbstractObservable or DefaultObservable.