A interface Binding fornece quatro métodos:
boolean isValid();
void invalidate();
ObservableList<?> getDependencies();
void dispose();
A validade de um Binding pode ser verificada com o método isValid() e configurada com o método invalidate(). Ele tem uma lista de dependências que podem ser obtidas com o método getDependencies(). O método dispose() assina o Binding se não mais será utilizado e recursos utilizados podem ser limpos.
Contudo, um Binding representa um binding unidirecional com múltiplas dependências. Cada dependência pode mandar eventos de invalidação para marcar o Binding como invalidado.
Quando o valor do Binding é consultado direto com o get() ou getValue(), se ele é invalidado, o valor é recalculado baseado nos valores das dependências.
Esse valor pode ser guardado e utilizado em outras pesquisas de valores, até o Binding se tornar inválido novamente. Essa avaliação lenta é que faz o JavaFX properties e binding eficiente. Utilizar o ChangeListener força a avaliação ser mais rápida.
Um binding pode ser utilizado como uma dependência de outro binding, arvores complexas de binding podem ser construídas. Esse é outro ótimo recurso que o JavaFX properties e bindings.
Nota: Como qualquer outra complexa estrutura, deve-se evitar baixa de desempenho e erros de comportamento, especialmente sobre alta carga de cenários.
Diferente dos properties, o framework fornece classes binding não concretas. Contudo, todos os bindings são customizados, e há várias maneiras para cria-los:
- Estendendo uma classe abstrata base, tal como DoubleBindigs
- Usando métodos de fabricação na classe utilitária Bindings
- Utilizando métodos da API fluentes nas classes property e binding
Fonte: The Definitive Guide to Modern Java Clients with JavaFX
Deixe um comentário