Software Architecture in Practice
4. Principles & Patterns
Design Patterns
1. Creational patterns - patterns that determine how objects are created
2. Structural patterns - patterns that dene relationships between objects
3. Behavioral patterns - patterns that dene the communication between objects
Creational Design Patterns
- Abstract factory - request an object from a factory object
- Factory method - choosing an object implementation, creating the object and returning it
- Builder - builds complex objects that may have different representations
- Dependency injection - request an object from an injector
- Lazy initialization - create an object only when its needed
- Object pool - avoid expensive object creation and release of resources by recycling objects that are not in use
- Prototype - cloning an object to create a new instance
- Singleton - restrict instantiation from creating more than one object
Structural Design Patterns
- Adapter - adapts one interface to another
- Bridge - separating an interface from its implementation
- Composite - structure of different objects
- Decorator - adds additional functionality to its interface
- Facade - masks complex structural code eg. using many objects and executes different methods
- Flyweight - caching and storing objects with the same "value"
- Private class data - restrict accessor and mutator methods to access
- Proxy - connects two other components and may add more functionality
Behavioral Design Patterns
- Chain of responsibility - passes a request through a chain of objects
- Command - encapsulate information to trigger an event or action
- Interpreter - evaluation of grammatical representation
- Iterator - a way to access each element of a collection
- Mediator - coordinates between different objects Memento - restores an object to its previous state
- Null object - acts as the default value of a class
- Observer - a way of notifying other objects of an object's state change
- State - when an internal state changes, the object's behavior changes
- Strategy - determines the algorithm that should be used for the implementation
- Template method - skeleton of an algorithm as an abstract class that allow subclasses to determine the behavior
- Visitor - separates the algorithm from the object it operates