Implementation of Abstract Factory, Decorator, Composite, Iterator, Singleton, Observer and Adapter patterns.