Design Patterns Explained - A New Perspective on Object-Oriented Design