工厂模式 --version 1
增加泛型