AbstractFactory
FactoryMethod