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