Simple example app for design patterns.
Singleton |
---|
- singleton: Singleton |
- Singleton() |
+ getInstance() : Singleton |
Notes
- used to guarantee one instance of an object in an application
- static in nature
- thread safe
- a private instance
- a private constructor
- no parameters required for construction
- getInstance() doesn't necessarily mean it is a singleton
Pitfalls
- Overuse
- Difficult to unit test
- If not careful, not thread-safe
- Can be confused for Factory
Builder |
---|
+ buildPart() |
↑
ConcreteBuilder |
---|
+ buildPart() |
+ getResult() |
Notes
- Handles complex constructors
- Large number of parameters
- Immutability
Examples
- StringBuilder
- DocumentBuilder
- LocaleBuilder
Pitfalls/Considerations
- Immutable
- Inner Static Class
- Designed first
- Complexity
IPrototype |
---|
+ Clone() |
+ DeepCopy() |
Notes
- Clone
- Guarantee unique instance
- Great to help with performance issues associated with creation of lots of objects
- Lightweight Construction
- Avoids keyword "new"
- Each instance is a copy, but unique
- Costly construction not handled by client
- Can do shallow(immediate properties) vs deep copy(object references)
Examples
- Cloneable
Pitfalls
- Sometimes not clear when to use
- Typically have to use it with another pattern like registry
- Shallow VS Deep Copy
Factory |
---|
+ factoryMethod(): Object |
↑
ConcreteBuilder |
---|
+ factoryMethod(): Object |
Notes
- Doesn't expose instantiation logic
- Defer to subclasses
- Common interface
- Specified by architecture, impelemented by user
- Solves complex creation
- Opposite of a Singleton
Example
- Calendar
- ResoureBundle
- NumberFormat
Pitfalls
- Complexity
- Creation in subclass
- Refactoring
AbstractFactory |
---|
+ createProduct(): Object |
↑
ConcreteFactory |
---|
+ concreteProduct(): Object |
↑
ConcreteProduct |
---|
Notes
- Factory of Factories
- Factory of related objects
- Common Interface
- Defer to Subclasses
- Groups Factories together
- Factory is reponsible for lifecycle
- Common Interface
- Concrete Classes
- Parameterized create method
- Composition
Examples
- DocumentBuilder
- Frameworks
Pitfalls
- Complexity
- Runtime switch
- Pattern within a pattern
- Problem specific
- Starts as a Factory