Ejemplo: bicotiActorGraphic2DPushButton - Explicaremos en detalle el funcionamiento de este actor y la relación con sus clases auxiliares. En Fig.14 puede verse un esquema de todas las entidades involucradas en este proceso.
Diferenciaremos dos situaciones que resumen el comportamiento:
En el primer caso un actor sin homólogo asociado recibe la orden Click() desde alguna parte de la aplicación y en consecuencia dispara el correspondiente PushButtonClicked() con un puntero a si mismo a cada uno de sus listeners.
Ejemplo: bicotiActorGraphic2DField - Explicaremos ahora un caso algo más complejo. A diferencia del ejemplo anterior, en un Text Field, la interacción puede cambiar el estado del actor. Son ahora tres las situaciones destacables:
Al igual que en el ejemplo previo comenzaremos por estudiar el caso en que el actor no tiene homólogo asociado y recibe de la aplicación un SetText(). Al no tener homólogo el SetText() invoca al FireFieldChanged() con un puntero a si mismo y el nuevo texto. Si este texto no coincide con el actual, se cambia efectivamente y se notifica a todos los listeners del cambio.
Nuevamente al igual que en el ejemplo previo, veremos la secuencia desencadenada por un operador que altera el texto sobre el homólogo de un bicotiActorGraphic2DField. En este caso, cada vez que el operador agrega un caracter al text field, se invoca un FireFieldChanged(), que al igual que en el caso anterior termina notificando a todos los listeners del cambio. Cabe destacar que aunque lo natural en este último caso parecería ser que el homólogo invocara un SetText en el actor, esto generaría una recursión infinita dado el comportamiento de este método, que se verá a continuación. Este diagrama de interacción puede verse en Fig.19.
Solo resta ver que sucede si desde la aplicación, se invoca un SetText() sobre un actor con homólogo. Remarcamos en este punto que siempre es el actor el que guarda su información de estado, aún cuando tenga homólogo. Es importante por lo tanto que esta información esté siempre sincronizada. En este caso particular el texto debe cambiarse en ambos objetos (actor y homólogo) y eso es exactamente lo que sucede. En efecto el actor, al ver que tiene homólogo no dispara el fire, en su lugar redirecciona el SetText() al homólogo. Este recibe y procesa el evento del mismo modo que si hubiera venido del operador logrando el resultado deseado.