summary of information in Design Patterns in Ruby by Russ Olsen