抽象工厂模式
singleton pattern