Diretrizes: Projetando JavaBeans
Tópicos
Introdução
Essa diretriz focaliza o design de JavaBeans e as diferentes opções que um designer
pode fazer.
Para obter informações adicionais sobre JavaBeans, consulte Conceitos:
JavaBeans.
Propriedades do JavaBean
Internamente, um valor de propriedade pode ser armazenado como um campo privado, mas também é
possível calculá-lo. O designer tem a opção de pré-calcular o valor
da propriedade ou de utilizar avaliação ociosa, em que o valor é calculado
apenas quando solicitado por um responsável pela chamada.
O designer também tem a opção de limitar ou restringir a propriedade. Se
a propriedade for limitada ou restringida, o designer deverá decidir sobre o mecanismo de eventos
e notificação.
Eventos e Notificação
Para a implementação do mecanismo de notificação, o designer tem duas
opções:
- Utilizar as classes PropertyChangeSupport e PropertyChangeEvent
a partir do pacote java.beans.
- Criar um mecanismo de notificação personalizado
As classes do pacote java.beans fornecem implementação que é aplicável
na maioria das situações. PropertyChangeEvent contém a referência ao
objeto que disparou o evento, o nome da propriedade como Cadeia e dois objetos
que representam os valores novo e velho da propriedade. A classe PropertyChangeSupport
mantém uma coleta de PropertyChangeListeners e contém o código
para a notificação no método firePropertyChange.

PropertyChangeSupport é comumente utilizado para JavaBeans que constituem parte
das interfaces do usuário.
A notificação personalizada pode ser apropriada onde o código extra da criação de
objetos de evento precisar ser minimizado. O aspecto negativo é que o implementador deve
implementar o mecanismo de notificação. O implementador da notificação personalizada
deve lembrar-se de que um encadeamento diferente pode incluir ou remover os listeners durante
o processo de notificação. Para fornecer o comportamento correto, a maior parte das
soluções cria uma cópia da coleta que contém os listeners; a notificação
é então executada com a utilização da cópia. A maior parte das implementações publicadas cria
essa cópia no início do processo de notificação, resultando na criação
de vários clones e em desempenho diminuído. Entretanto, como as notificações são mais
comuns que as adições ou remoções do listener, uma cópia de longa duração pode ser criada
antecipadamente durante a adição ou remoção dos listeners e, em seguida, reutilizada para
notificações, fornecendo uma execução mais rápida.
Considerando a produtividade dos desenvolvedores, a notificação personalizada deve ser tentada
somente quando o desempenho do suporte à alteração de propriedade a partir do pacote java.beans
provar ser o gargalo.
Os exemplos a seguir demonstram a utilização do suporte à alteração de propriedade
a partir do pacote java.beans e a utilização de um mecanismo de notificação
personalizado.
Exemplo: JavaBean Tank utilizando java.beans.PropertyChangeSupport
Aqui, temos um JavaBean representando um Tank, que possui uma propriedade do limite:
nível. Quando o nível do Tank é alterado, o Tank
dispara um PropertyChangeEvent, que é manipulado pelo objeto TankController.

Exemplo: Java Bean Tank utilizando Notificação Personalizada
No exemplo a seguir, a classe Tank é implementada com um mecanismo de
notificação personalizado mais eficiente, evitando a criação de objetos durante
a notificação.

|