Eu estava pensando sobre a seguinte implementação de
public void update(Observable obs, Object arg)
enquanto eu quiser enviar para todo o meu observador e atualizar usando notifyObserver()
I e passar uma referência ao this
observador, pode usar o getters
do assunto para obter as informações que ele deseja.
Para que serve o arg
argumento sobre o método de atualização?
java
observer-pattern
USer22999299
fonte
fonte
arg
é um parâmetro ou grupo de parâmetros, como uma opção adicionalRespostas:
Ao implementar o padrão Observer, há duas abordagens principais a serem consideradas: o modelo 'push' e o modelo 'pull'.
No modelo 'push', o sujeito (ou seja, o Observável) envia ao observador, mediante notificação, todos os dados necessários. O observador não precisa consultar o assunto para obter informações. No modelo 'pull', o sujeito apenas notifica o observador de que algo aconteceu, e o observador consulta o sujeito com base para obter as informações necessárias.
Vamos discutir os prós e contras de ambas as abordagens:
Empurrar
A principal vantagem do modelo "push" é o menor acoplamento entre o observador e o sujeito. O observador não precisa saber nada sobre o assunto para consultá-lo. Se necessário, precisamos fazer um dos seguintes: A- fazer downcasting do lado do observador para invocar
get
métodos específicos de classe sobre o assunto. Isto é mau. B - tornar aObservable
interface mais específica da classe, oferecendoget
métodos específicos , tornando assim menos geral o relacionamento entre o observador e o sujeito e tornando as coisas mais copuplicadas.Ao implementar o modelo "push", evitamos tudo isso.
No entanto, a desvantagem é menos flexibilidade: o sujeito nem sempre sabe quais informações exatas os observadores precisam para enviá-las a eles. Isso geralmente significa interfaces mais específicas do Observador, como as
AgeObserver
que são notificadas quando a 'idade' do sujeito é alterada e asHeightObserver
quais são enviadas a correnteheight
do sujeito na notificação.Esta é uma opção. O outro é o assunto que envia muitas informações encapsuladas em um
Info
objeto de algum tipo e solicita que os observadores as consultem a partir daí. Mais uma vez, não podemos ter certeza de que estamos enviando as informações corretas. Portanto, é isso ou forçar os observadores a implementar interfaces mais específicas do Observador, o que aperta o acoplamento do lado do observador.Puxar
Eu já notei as desvantagens do modelo 'pull'. Os observadores precisariam saber coisas sobre o assunto para consultar as informações corretas, o que leva A a downcasting (feio), ou B- favoravelmente a
Observable
interfaces mais específicas , que oferecem métodos de acesso mais específicos. Por exemplo,AgeObservable
oferece umgetAge()
métodoA vantagem disso é mais flexibilidade. Cada observador pode decidir por si próprio o que consultar, sem depender do assunto para enviar as informações corretas.
Você deve escolher a estratégia melhor para o projeto específico em que está trabalhando.
Na realidade, você sempre terá interfaces específicas
Observer
eObservable
, portanto, terá algum acoplamento entre os lados.Portanto, escolha "puxar" ou "empurrar" de acordo com o que melhor lhe convier.
Todos os
AgeObserver
s precisam simplesmenteage
do assunto? Implemente o modelo 'push'. Menos acoplamento e mais simples.Todos os
HeightObserver
s precisam de informações variadas sobre o assunto - também é necessário consultar a idade, e algum outro objeto precisa consultar o peso além da altura? Implemente o modelo 'pull'. Isso forçaria você a adicionar acessadores (getters) àObservable
interface (isso ou passar o objeto real como um parâmetro em seu tipo explícito, mas fazer isso por meio da interface permite negar aos observadores o acesso a coisas que não importam eles). Essa alma cria maior acoplamento, mas é mais flexível.Escolha o que melhor se adapta à sua situação.
fonte
Object arg
se destina ao modelo 'push', ondearg
é enviado um 'pacote de informações' ao observador.Observable
interface? Se você não confiar no tipo concreto do assunto - ou seja, ao não fazer a rejeição - o código atual do observador funcionará da mesma forma, polimorficamente, com o novo assunto.