尝试工厂模式