class EmitterBasedMulti extends AbstractMulti<T> {

    @Override
    public void subscribe(MultiSubscriber<? super T> downstream) {
        BaseMultiEmitter<T> emitter;

        switch (backpressure) {
            case DROP:
                emitter = new DropItemOnOverflowMultiEmitter<>(downstream);
                break;

            case ERROR:
                emitter = new ErrorOnOverflowMultiEmitter<>(downstream);
                break;

            case IGNORE:
                emitter = new IgnoreBackPressureMultiEmitter<>(downstream);
                break;

            case LATEST:
                emitter = new DropLatestOnOverflowMultiEmitter<>(downstream);
                break;

            default:
                emitter = new BufferItemMultiEmitter<>(downstream, 16);
                break;

        }

        downstream.onSubscribe(emitter);
        try {
            consumer.accept(emitter.serialize());
        } catch (Throwable ex) {
            emitter.fail(ex);
        }
    }

    public  EmitterBasedMulti(Consumer<MultiEmitter<? super T>> consumer, BackPressureStrategy backpressure);

}