Nature is formed by patterns. As my data structures teacher, Dr. Méndez, keeps saying in our class: “PATTERNS!”. So yeah.
Software desing patterns consist in, as you may think, patterns when designin software (what a great reasoning). But why is this important? When designing with patterns, you have some advantages:
- Code reutilization: by following the same pattern, one can always have a starting base, instead of starting by scratch.
- Standarization: using patterns, code becomes simpler to read, easier to understand and, if another developer continues the work, he/she will have a lot less problems with it.
- Already-working solution: if one pattern works, then it might work with another project.
Software design patterns can be classified into the following:
- Creational: focused on the creation of objects and the manipulation of them. Examples:
- Builder
- Object pool
- Prototype
- Structural: focused on relationships between entities. Examples:
- Adapter
- Bridge
- Decorator
- Behavioral: focused on the behavior of and within objects. Examples:
- Iterator
- Publish/subscribe
- Template
- Concurrency: focused on multi threading. Examples:
- Active object
- Reactor
- Thread-specific storage

