There are some other options.
1. Use lambda instead of the mode strategy objects
     * Pros: A bit simpler
     * Cons: I wanted to name the applying method of modes rather than just Proc#call.
2. Use normal class instead of singleton class
     * Pros: Looks less scary
     * Cons: Although the strategies are logically singletons, we cannot enforce it.
3. Use modules instead of singleton classes and extend Field objects when instantiated
     * Pros: A bit simpler.
     * Cons: It means we have as many internal singleton classes as fields defined in the record.  Sounds waste of memory, and harder to hit method cache.
4. Add :mode attribute to Field objects and use "case ... when" in #format
     * Pros: Least scary
     * Cons: Can be slower in theory.  Less object-oriented style.

Thoughts?