Add factory_method and abstract_factory design pattern