- The Decorator wraps a single class, exposes the same interface and adds functionality to the wrapped class which is injected into the Decorator.
- The Adapter wraps a single class and changes its interface while maintaining functionality. Usually this is done to make the class easier to use in the consuming system.
- The Facade wraps multiple classes and provides a simplified interface for using them together.
- The Proxy wraps a single class and is similar to the Decorator in implementation, though it does not extend the functionality of the class, but hides an implementation detail such as network transport or lazy loading. The consumer shouldn't know it has a proxy rather than the real object.