public static ShadowRouteEngine newInstance(final QueryContext queryContext) {
        SQLStatement sqlStatement = queryContext.getSqlStatementContext().getSqlStatement();
        if (sqlStatement instanceof InsertStatement) {
            return createShadowInsertStatementRoutingEngine(queryContext);
        }
        if (sqlStatement instanceof DeleteStatement) {
            return createShadowDeleteStatementRoutingEngine(queryContext);
        }
        if (sqlStatement instanceof UpdateStatement) {
            return createShadowUpdateStatementRoutingEngine(queryContext);
        }
        if (sqlStatement instanceof SelectStatement) {
            return createShadowSelectStatementRoutingEngine(queryContext);
        }
        return createShadowNonMDLStatementRoutingEngine(queryContext);
    }
@Test
    void assertNewInstance() {
        ShadowRouteEngine shadowInsertRouteEngine = ShadowRouteEngineFactory.newInstance(
                new QueryContext(createInsertSqlStatementContext(), "", Collections.emptyList(), new HintValueContext(), mockConnectionContext(), mock(ShardingSphereMetaData.class)));
        assertThat(shadowInsertRouteEngine, instanceOf(ShadowInsertStatementRoutingEngine.class));
        ShadowRouteEngine shadowUpdateRouteEngine = ShadowRouteEngineFactory.newInstance(
                new QueryContext(createUpdateSqlStatementContext(), "", Collections.emptyList(), new HintValueContext(), mockConnectionContext(), mock(ShardingSphereMetaData.class)));
        assertThat(shadowUpdateRouteEngine, instanceOf(ShadowUpdateStatementRoutingEngine.class));
        ShadowRouteEngine shadowDeleteRouteEngine = ShadowRouteEngineFactory.newInstance(
                new QueryContext(createDeleteSqlStatementContext(), "", Collections.emptyList(), new HintValueContext(), mockConnectionContext(), mock(ShardingSphereMetaData.class)));
        assertThat(shadowDeleteRouteEngine, instanceOf(ShadowDeleteStatementRoutingEngine.class));
        ShadowRouteEngine shadowSelectRouteEngine = ShadowRouteEngineFactory.newInstance(
                new QueryContext(createSelectSqlStatementContext(), "", Collections.emptyList(), new HintValueContext(), mockConnectionContext(), mock(ShardingSphereMetaData.class)));
        assertThat(shadowSelectRouteEngine, instanceOf(ShadowSelectStatementRoutingEngine.class));
    }