update abstract_factory pattern