state pattern (inkl. javadoc & comment)