open:abstract-factory-pattern