Design Patterns for reference