Provides classes for different design patterns in generic way.