Finished AbstractFactory pattern