GoF Design Patters with examples