In this post by Fabrizio Giudici's he introduces you to what he calls the Java Observation API based on the following key abstractions:
* An Observer represents entities capable to make observations. It may be a physical person, or a device, or anything else makes sense. * An Observation is made at a certain time and Location, by one or more Observers and is composed of one or more ObservationItems. * An ObservationItem pairs an Observable with a Cardinality. * An Observable has no special properties and can be anything. * A Cardinality may be a single integer number, a close or open range of integers (e.g. "between 10 and 20", or "more than 5"), or "undefined". * An ObservationSet is a set of Observations. * A Source is where a certain datum comes from (i.e. who or what provided it, inserting into the database).
Read Fabrizio Giudici's post 'The Observation API (hey, it's not the Observable pattern)':