This exercise was meant to be a Java refresher. This implementation is likely over-engineered but the point of writing it was to remember:
- Java class hierarchies (including abstract classes)
- Java interfaces
- Java's iterator pattern
- How nice it is to have an IDE write code for you
- How nice it is to use a strongly typed language
- How functional concepts don't translate very well to Java (maybe Java 8 lambdas would help here)
- How to use some handy OOP design patterns (like Constructor/Builder)
This I probably did wrong:
- I didn't follow a specific coding standard.