工厂模式抽象过的代码