study of design patterns