添加了工厂模式的实现