class ChangeVisitorFactory {
    @SuppressWarnings("unchecked")
    private final Map<String, Class> tagToClassMap;

    private static final ChangeVisitorFactory instance = new ChangeVisitorFactory();

    @SuppressWarnings("unchecked")
    private ChangeVisitorFactory() {
        tagToClassMap = new HashMap<>();
        Class[] visitors = new Class[]{
                AddColumnChangeVisitor.class,
        };

        try {
            for (Class<ChangeVisitor> visitorClass : visitors) {
                ChangeVisitor visitor = visitorClass.getConstructor().newInstance();
                tagToClassMap.put(visitor.getName(), visitorClass);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static ChangeVisitorFactory getInstance() {
        return instance;
    }

    /**
     * Create a new ChangeVisitor subclass based on the given tag name.
     */
    public ChangeVisitor create(String tagName) {<FILL_FUNCTION_BODY>}

}

        Class<?> aClass = tagToClassMap.get(tagName);
        if (aClass == null) {
            return null;
        }
        try {
            return (ChangeVisitor) aClass.getConstructor().newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    
<no_super_class>