yegor256
yegor256

Reputation: 105133

What to call an object that acts like an enter-only-once gate?

What would you call a stateful function/object x() -> bool with the following behavior: on the first call it returns TRUE, on all consecutive calls it returns FALSE. Maybe there is a pattern name already for such functionality?

Upvotes: 3

Views: 276

Answers (1)

Semyon Kirekov
Semyon Kirekov

Reputation: 1442

The closest concept is the read-once object pattern from the Secure by Design book. Look at the paragraph below describing the object that allows to request the password only once.


A read-once object is, as the name implies, an object designed to be read once. This object usually represents a value or concept in your domain that’s considered to be sensitive (for example, passport numbers, credit card numbers, or passwords). The main purpose of the read-once object is to facilitate detection of unintentional use of the data it encapsulates.

public final class SensitiveValue {
    private transient final AtomicReference<String> value;

    public SensitiveValue(final String value) {
        validate(value);
        this.value = new AtomicReference<>(value);
    }

    public String value() {
        return notNull(value.getAndSet(null),
            "Sensitive value has already been consumed");
    }

    @Override
    public String toString() {
        return "SensitiveValue{value=*****}";
    }
}

I don't know the full context of your problem but the book suggests to use the read-once object pattern in favor of security perspective. @jaco0646 also pointed out in the comments that the concept is similar to the circuit breaker pattern. Though it doesn't force for the object to always return the same value on consecutive calls. Instead, it temporary makes to obtain the stub value to give the external service some time to recover.

Upvotes: 1

Related Questions