b'\n_START_ARTICLE_\nPatr\xc3\xb3 observador\n_START_PARAGRAPH_\nEl patr\xc3\xb3 observador (de vegades conegut com a publica/subscriu) \xc3\xa9s un patr\xc3\xb3 de disseny utilitzat en programaci\xc3\xb3 d\'ordinadors per a observar l\'estat d\'un objecte en un programa. Est\xc3\xa0 relacionat amb el principi d\'invocaci\xc3\xb3 impl\xc3\xadcita._NEWLINE_Aquest patr\xc3\xb3 es fa servir principalment per a implementar sistemes de tractament d\'esdeveniments distribu\xc3\xafts. En alguns llenguatges de programaci\xc3\xb3, els problemes tractats per aquest patr\xc3\xb3, s\xc3\xb3n tractats a la sintaxi de tractament d\'esdeveniments nativa. Aquesta \xc3\xa9s una funcionalitat molt interessant en termes de desenvolupament d\'aplicacions en temps real.\n_START_SECTION_\nSumari\n_START_PARAGRAPH_\nL\'ess\xc3\xa8ncia d\'aquest patr\xc3\xb3 \xc3\xa9s que un o m\xc3\xa9s objectes (anomenats observadors o escoltadors) s\xc3\xb3n registrats (o es registren ells mateixos) per a observar un esdeveniment que pot ser llen\xc3\xa7at per l\'objecte observat (el subjecte). L\'objecte que pot llen\xc3\xa7ar un esdeveniments generalment mant\xc3\xa9 una col\xc2\xb7lecci\xc3\xb3 d\'observadors.\n_START_SECTION_\nClasses participants\n_START_PARAGRAPH_\nEls participants del patr\xc3\xb3 es mostren a continuaci\xc3\xb3. Les funcions dels membres es llisten amb punts.\n_START_SECTION_\nJava\n_START_PARAGRAPH_\nAqu\xc3\xad hi ha un exemple que agafa una entrada de teclat i _NEWLINE_tracta cada l\xc3\xadnia de l\'entrada com un event. Aquest exemple usa les classes de les llibreries java.util.Observer i java.util.Observable. Quan una cadena de car\xc3\xa0cters \xc3\xa9s subministrada a trav\xc3\xa9s d\'un System.in, el m\xc3\xa8tode notifyObserver \xc3\xa9s cridat, que d\xc3\xb3na ordres d\'avisar a tots els observadors(observers) si passa l\'esdeveniment, aix\xc3\xad \xc3\xa9s com invoca els m\xc3\xa8todes \'update\' - o en el nostre exemple, ResponseHandler.update(...)._NEWLINE_El fitxer myapp.java cont\xc3\xa9 un m\xc3\xa8tode main() que hauria de ser usat per executar el codi._NEWLINE_/* Nom del fitxer : EventSource.java */package obs;import java.util.Observable; //Observable \xc3\xa9s aqu\xc3\xadimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class EventSource extends Observable implements Runnable _NEWLINE_{_NEWLINE_    public void run()_NEWLINE_    {_NEWLINE_        try_NEWLINE_        {   _NEWLINE_            final InputStreamReader isr = new InputStreamReader( System.in );_NEWLINE_            final BufferedReader br = new BufferedReader( isr );_NEWLINE_            while( true )_NEWLINE_            {_NEWLINE_                final String response = br.readLine();_NEWLINE_                setChanged();_NEWLINE_                notifyObservers( response );_NEWLINE_            }_NEWLINE_        }_NEWLINE_        catch (IOException e)_NEWLINE_        {_NEWLINE_            e.printStackTrace();_NEWLINE_        }_NEWLINE_    }}_NEWLINE_/* Nom del fitxer: ResponseHandler.java */package obs;import java.util.Observable;import java.util.Observer; /* this is Event Handler */public class ResponseHandler implements Observer{_NEWLINE_    private String resp;_NEWLINE_    public void update (Observable obj, Object arg)_NEWLINE_    {_NEWLINE_        if (arg instanceof String)_NEWLINE_        {_NEWLINE_            resp = (String) arg;_NEWLINE_            System.out.println("\\nResposta rebuda: "+ resp );_NEWLINE_        }_NEWLINE_    }}_NEWLINE_/* Nom del fitxer: myapp.java *//* \xc3\x89s el programa principal */package obs;public class MyApp{_NEWLINE_    public static void main(String args[])_NEWLINE_    {            _NEWLINE_        System.out.println("Entra text >");_NEWLINE__NEWLINE_        // crea un codi d\'esdeveniment - llegeix des de stdin_NEWLINE_        final EventSource evSrc = new EventSource();_NEWLINE__NEWLINE_        // crea un observer_NEWLINE_        final ResponseHandler respHandler = new ResponseHandler();_NEWLINE__NEWLINE_        // subscriu l\'observer al codi d\'esdeveniment_NEWLINE_        evSrc.addObserver( respHandler );_NEWLINE__NEWLINE_        // comen\xc3\xa7a el thread d\'esdeveniment_NEWLINE_        Thread thread = new Thread(evSrc);_NEWLINE_        thread.start();_NEWLINE_    }}'