Introduction to design patterns