C# Object-Oriented Design Patterns (1): Object-Oriented Design Patterns and Principles