Yes the choice of which splitter to use is not made here. It's in the ParallelIteratorRegionSplitterFactory. 

I make it as Singleton originally because the logic can be wrapped into just one single method without any specific state. it's just a method pointer object. We maybe creating some Splitter object that may not be used eventually, but the memory footprint for those objects are trivial.