- it solves a problem
- it is a proven concept
- the solution is not obvious — usually patterns are not so simple
- it describes a relation — how things interacts in code
- it has a significant human component — we need make something to code for it works like a pattern
- no need to invent solution again. Good programmer — lazy programmer.
- patterns can be considered as common vocabulary — we can easily communicate about development process with colleagues
- Creational — deals with creation of new instances of object.
- Constructor
- Module
- Factory
- Singleton
- Structural — deals with makeup actual objects themselves
- Decorator
- Facade
- Flyweight
- Behavioral — deals with how objects relate each other, how them operate
- Command
- Mediator
- Observer