When an architect sits down to design a building, he or she must consider the purpose of the building and then begin to organize its overall functionality into a series of interrelated subsystems. Similarly, in software architecture, we can draw on a set of time-tested building blocks called design patterns.
A canonical set of design patterns was first formalized in Design Patterns: Elements of Reusable Object-Oriented Software, also known as the "Gang of Four" (GoF) patterns. The patterns fall into three categories.
Creational Patterns
Used to instantiate entities or groups of related entities.
- Abstract Factory — Creates an instance of several families of classes.
- Builder — Separates object construction from its representation.
- Factory Method — Creates an instance of several derived classes.
- Object Pool — Avoids expensive acquisition/release of resources by recycling objects.
- Prototype — A fully initialized instance to be copied or cloned.
- Singleton — A class of which only a single instance can exist.
Structural Patterns
Used to broker the relationships between entities, generally to specify entity composition.
- Adapter — Match interfaces of different classes.
- Bridge — Separates an object's interface from its implementation.
- Composite — A tree structure of simple and composite objects.
- Decorator — Add responsibilities to objects dynamically.
- Facade — A single class that represents an entire subsystem.
- Flyweight — A fine-grained instance used for efficient sharing.
- Private Class Data — Restricts accessor/mutator access.
- Proxy — An object representing another object.
Behavioral Patterns
Used in the assignment of responsibilities to entities, generally to specify communication patterns between entities.
- Chain of Responsibility — A way of passing a request between a chain of objects.
- Command — Encapsulate a command request as an object.
- Interpreter — A way to include language elements in a program.
- Iterator — Sequentially access the elements of a collection.
- Mediator — Defines simplified communication between classes.
- Memento — Capture and restore an object's internal state.
- Null Object — Designed to act as a default value of an object.
- Observer — A way of notifying change to a number of classes.
- State — Alter an object's behavior when its state changes.
- Strategy — Encapsulates an algorithm inside a class.
- Template Method — Defer the exact steps of an algorithm to a subclass.
- Visitor — Defines a new operation to a class without change.
Links & Resources
- Design Patterns: Elements of Reusable Object-Oriented Software — The canonical textbook.
- Source Making Design Patterns — Web-based presentation with code samples.
- Design Patterns for Humans — Plain-English explanations with code samples.
Assignment
Work on the deliverables from the stand-up meeting.