And that works as expected. Each song is played in the order in which is was added to the collection:

$ ./bin/play_melvie.dart
Playing The Lady is a Tramp // The Velvet Frog: The Very Best of Mel Tormé
Playing New York, New York Medley // A Vintage Year
Playing Blue Moon // The Velvet Frog: The Very Best of Mel Tormé
Playing 'Round Midnight // Tormé

On the face of it, there is little benefit to this approach. The forEach() of a Dart List could accomplish much the same behavior with no additional classes. That said, as the Gang of Four book mentions, it would be possible for multiple state mementos to work on the same collection (e.g. if multiple fans wanted to listen to the Velvet Fog at their convenience). Additionally, the internals of the state are not exposed to the caretaker—only the SongCollection has access to it, preserving encapsulation. This is not of much benefit when the state is a tracking integer, but more complex state mementos would certainly benefit from this approach.

In the end, this was a fun exercise. But I'll probably stick with forEach() all the same.