AbstractFactory
update