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