OOP Design Patterns Assignment