Introduction to Design Patters, written for CS457: Software Design