Adding the Abstract Factory apttern and explicit interface implementation for reference