static factory pattern , static singleton factory pattern