Abstract factory
IoC