Ended up using the Builder pattern to create an additional mutable object that held all the data the World needed, which implemented a "build" step that created your immutable World instance.The obtained World instance is immutable, ie, you cant add/remove observers, nor set the 'data' field, which brings me to.
read more