Watch a video to learn the overall design approach of the patterns
Design patterns are not “reusable solutions” but instead create a rich language developers use to communicate, collaborate, and make collective decisions about design. When you study design patterns you are teaching yourself what good design is, and why.
This repository delineates each pattern according to three kinds of forces:
- Contextual Forces which help you to discover the appropriate pattern for the problem you are trying to solve
- Implementation Forces, which show you options and concerns when implementing each pattern
- Consequent Forces, which help you to evaluate the cost/benefit of each pattern as well as how to unit test it
The "original seed" material for this repository was taken directly from appendix B of Scott Bain's book Emergent Design: The Evolutionary Nature of Professional Software Development
Patterns By Encapsulation
Behavior | Strategy | Bridge | Template Method | Null Object | __ |
Sequence | Decorator | Chain of Responsibility | Template Method | __ | __ |
Workflow | Template Method | Visitor | Bridge | Null Object | __ |
Cardinality | Decorator | Chain of Responsibility | Proxy | Observer | Composite |
Construction | Singleton | Abstract Factory | Builder | __ | __ |
Selection | Chain of Responsibility | __ | __ | __ | __ |
Structure | Composite | Template Method | __ | __ | __ |
Entity | Facade | Adapter | Proxy | __ | __ |
Relationships | Observer | Command | Mediator | Visitor | __ |
Dependencies | Mock Object | __ | __ | __ | __ |