static ClickHouseLoadBalancingPolicy create(String name) {
        ClickHouseLoadBalancingPolicy policy;

        if (FIRST_ALIVE.equalsIgnoreCase(name)) {
            policy = new FirstAlivePolicy();
        } else if (RANDOM.equalsIgnoreCase(name)) {
            policy = new RandomPolicy();
        } else if (ROUND_ROBIN.equalsIgnoreCase(name)) {
            policy = new RoundRobinPolicy();
        } else {
            try {
                Class<?> clazz = ClickHouseLoadBalancingPolicy.class.getClassLoader().loadClass(name);
                if (!ClickHouseLoadBalancingPolicy.class.isAssignableFrom(clazz)) {
                    throw new IllegalArgumentException(
                            ClickHouseUtils.format("Unsupported policy: class [%s] must extend [%s]", name,
                                    ClickHouseLoadBalancingPolicy.class.getName()));
                }
                policy = (ClickHouseLoadBalancingPolicy) clazz.getDeclaredConstructor().newInstance();
            } catch (ClassNotFoundException e) {
                throw new IllegalArgumentException("Unknown policy: " + name, e);
            } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException
                    | SecurityException e) {
                throw new IllegalArgumentException("Failed to instantiate policy: " + name, e);
            }

        }
        return policy;
    }
Creates policy.

@param name policy name or a full qualified class name
@return non-null policy
@throw IllegalArgumentException when failed to create policy
clickhouse-client/src/main/java/com/clickhouse/client/ClickHouseLoadBalancingPolicy.java