Let's not have it be a singleton. Just pass the StatementContext through the factory and let the factory decide which splitter to use. Then the splitter can store the state it needs.