Resources I found useful:
- Design Patterns: Elements of Reusable Object-Oriented Software
- Head First Design Patterns
- http://sourcemaking.com/design_patterns
- Game Programming Patterns : http://gameprogrammingpatterns.com
- dotnetcodr :: Architecture and patterns
Minor resources:
- SO: Real World Example of the Strategy Pattern
- PatternCraft - Design Patterns with examples in StarCraft
- Encapsulate what varies
- Favor composition over inheritance
- Program to interface, not implementation
- Strive for loosely coupled designs between objects that interact
- Classes should be open for extension but closed for modification (Open/closed principle)
- Depend on abstractions. Do not depend on concrete classes (Dependency Inversion Principle)
- Only talk to your friends (Law of Demeter (LoD) or principle of least knowledge)
- Don't call us, we'll call you (Hollywood principle)
- A class should have only one reason to change (Single responsibility principle)