// Un recurso de juguete: avisa cuando se abre y cuando se cierra.
// Si failOnClose es true, close() también lanza una excepción.
public class Gate implements AutoCloseable {
    private final String name;
    private final boolean failOnClose;

    public Gate(String name, boolean failOnClose) {
        this.name = name;
        this.failOnClose = failOnClose;
        IO.println("abre " + name);
    }

    public void use(boolean fail) {
        IO.println("usa " + name);
        if (fail) {
            throw new IllegalStateException("falla al usar " + name);
        }
    }

    @Override
    public void close() {
        IO.println("cierra " + name);
        if (failOnClose) {
            throw new IllegalStateException("falla al cerrar " + name);
        }
    }
}
