A free, self-paced textbook in 6 chapters. Read a chapter, then drill it with the 51 companion flashcards using spaced repetition.
Design patterns are reusable solutions to problems that recur again and again in software design. Rather than being finished code that can be dropped into a project, patterns are t...
Creational patterns focus on how objects are created, aiming to make instantiation flexible, decoupled, and appropriate to the situation. The Singleton pattern ensures that a class...
Structural patterns describe how to assemble classes and objects into larger structures while keeping those structures flexible and efficient. The Adapter pattern converts the inte...
Behavioral patterns are concerned with how objects communicate and how responsibilities are distributed among them. The Observer pattern defines a one-to-many dependency between ob...
The SOLID principles are five guidelines that help developers build object-oriented systems that are maintainable, flexible, testable, and resistant to gradual decay. The Single Re...
Several broader design principles complement the individual patterns and the SOLID guidelines. Composition over Inheritance favors assembling objects through has-a relationships ra...