https://foro.gambas-es.org/viewtopic.php?f=1&t=6462&p=38858#p38858
-----------------------------------
vuott
Jueves, 22 Junio 2017, 22:37

Re: Cual Es La Diferencia Entre Watcher Y Observer?
-----------------------------------
[quote user="v3ctor" post="38857"]Watcher hereda todo de observer[/quote]
Uhmmm....   no creo que hereda [u]todo[/u] de la Clase "[i]Observer[/i]", porque "[i]Observer[/i]" permite levantar todos los especificos eventos propios de la Clase del objeto que él observa.
Por el contrario la Clase "[i]Watcher[/i]" no puede hacerlo.

Por ejemplo, esto es posible:
[code linenumbers=false syntax=gambas]Public Sub Form_Activate()
  
  Dim ob As Observer
      
   ob = New Observer(Button1) As "Boton"
      
End


Public Sub Boton_Click()

  Print "Yo NO soy Pythonista !"

End[/code]

Esto [u]no[/u] es posible:    :mryellow: 
[code linenumbers=false syntax=gambas]Private w As Watcher


Public Sub Form_Activate()
  
  w = New Watcher(Button1) As "Boton"

End


Public Sub Boton_Click()

  Print "Yo SOY Pythonista !"

End[/code]


Es decir que la Clase "[i]Watcher[/i]" ofrece 4 eventos, que se añaden a los eventos que la Clase del objeto observado posee [i]ab origine[/i].

Asì nosotros tendremos:
[code linenumbers=false syntax=gambas]Private w As Watcher


Public Sub Form_Activate()
  
  w = New Watcher(Button1) As "Boton"
      
End


Public Sub Boton_Move()

  Print "Evento Boton_Move() !"

End


Public Sub Button1_Click()

   Print "Evento Button1_Click() !"

End

Public Sub Button2_Click()

  Button1.Move(20, 20, 30, 40)

End[/code]

o si tu prefieres usar tambien la Clase "[i]Observer[/i]":
[code linenumbers=false syntax=gambas]Private w As Watcher


Public Sub Form_Activate()
  
  Dim obs As Observer
  
  w = New Watcher(Button1) As "Boton"
  
  obs = New Observer(Button1) As "Bbtt"
      
End


Public Sub Boton_Move()

  Print "Evento Boton_Move() !"

End


Public Sub Bbtt_Click()

   Print "Evento Bbtt_Click() con "; Quote("Observer"); " !"

End

Public Sub Button2_Click()

  Button1.Move(20, 20, 30, 40)

End[/code]


