改成抽象工厂模式