Demonstrating the SOLID design principles in Java