Notes:
- Design Pattern are typically OOP-based
- Go is not OOP
- No inheritance
- Weak encapsulation
- Permissive visibility/naming
- Hierarchy implies a set of related types: shared interfaces, embedding
- Properties are a combination of getter/setter methods
- Factory
- Abstract Factory
- Builder
- Prototype
- Singleton
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Chain of Responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template
- Visitor