修改抽象工厂方式