Design Pattern --------Observer pattern

来源:互联网 发布:java用户角色权限设计 编辑:程序博客网 时间:2024/05/14 22:36


Below is an example that takes keyboard input and treats each input line as an event. The example is built upon the library classesjava.util.Observer and java.util.Observable. When a string is supplied from System.in, the methodnotifyObservers is then called, in order to notify all observers of the event's occurrence, in the form of an invocation of their 'update' methods - in our example,ResponseHandler.update(...).


/* File Name : EventSource.java */package org.wikipedia.obs; import java.util.Observable;          //Observable is hereimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; /**  * be observed  * @author Administrator  *  */public class EventSource extends Observable implements Runnable {    public void run() {        try {            final InputStreamReader isr = new InputStreamReader(System.in);            final BufferedReader br = new BufferedReader(isr);            while (true) {                String response = br.readLine();                setChanged();                notifyObservers(response);            }        }        catch (IOException e) {            e.printStackTrace();        }    }}

/* File Name: ResponseHandler.java */ package org.wikipedia.obs; import java.util.Observable;import java.util.Observer;  /* this is Event Handler */ /**  * observer  * @author Administrator  *  */public class ResponseHandler implements Observer {    private String resp;    public void update(Observable obj, Object arg) {        if (arg instanceof String) {            resp = (String) arg;            System.out.println("\nReceived Response: " + resp );        }    }}

/* Filename : MyApp.java *//* This is the main program */ package org.wikipedia.obs; public class MyApp {    public static void main(String[] args) {        System.out.println("Enter Text >");         // create an event source - reads from stdin        final EventSource eventSource = new EventSource();         // create an observer        final ResponseHandler responseHandler = new ResponseHandler();         // subscribe the observer to the event source        eventSource.addObserver(responseHandler);         // starts the event thread        Thread thread = new Thread(eventSource);        thread.start();    }}




原创粉丝点击