First draft of the Abstract Factory pattern