Abstract Factory pattern added but comments are missing that will be
fixed.