The standard solutions to common problems in software design, with dual-language examples.
Ensures a class has only one instance and provides a global point of access.
Creates objects without specifying the exact class of object that will be created.
Constructs complex objects step by step.
Allows incompatible interfaces to work together.
Dynamically adds behavior to an object without affecting other objects.
Provides a simplified interface to a complex system of classes.
Notify multiple objects about events happening to the object they're observing.
Defines a family of algorithms and makes them interchangeable.
Encapsulate a request as an object, allowing parameterization and queuing.