+ Modifier modify() throws IllegalStateException;
+
+ /**
+ * Allows modifying an album. Modifications are only performed once {@link
+ * #update()} has succesfully returned a new album with the modifications
+ * made.
+ */
+ interface Modifier {
+
+ Modifier setTitle(String title);
+
+ Modifier setDescription(String description);
+
+ Album update() throws IllegalStateException;
+
+ class AlbumTitleMustNotBeEmpty extends IllegalStateException { }
+
+ }