package co.smartreceipts.android.aws.s3; import android.support.annotation.NonNull; import io.reactivex.Observable; import io.reactivex.subjects.ReplaySubject; class S3KeyGeneratorFactory { private ReplaySubject<S3KeyGenerator> s3KeyGeneratorReplaySubject; @NonNull public synchronized Observable<S3KeyGenerator> get() { if (s3KeyGeneratorReplaySubject == null) { s3KeyGeneratorReplaySubject = ReplaySubject.create(1); Observable.<S3KeyGenerator>create(emitter -> { emitter.onNext(new S3KeyGenerator()); emitter.onComplete(); }) .subscribe(s3KeyGeneratorReplaySubject); } return s3KeyGeneratorReplaySubject; } }