Design Patterns with O'Reilly's Head First Design Patterns.
If you want to watch them working, you'll able to compile or run with VSCode's extensions.
Encapsulates interchangeable behaviors and uses delegation to decide which one to use.
Allows objects to be notified when state changes.
Wraps an object to provide new behavior.
Subclasses decide which concrete classes to create.
Ensures one and only object is created.
Encapsulates a request as an object.
Wraps an object and provides a different interface to it.
Simplifies the interface of a set of classes.
Clients treat collections of objects and individual objects uniformly.
Provides a way to traverse a collection of objects without exposing its implementation.
Encapsulates state-based behaviors and uses delegation to switch between behaviors.
Wraps an object to control access to it.