added generics design patterns