使用模板生成factory