[add] 工厂模式