Several implementation of the Factory pattern.