Programming Foundations Design Patterns 2