Documente Academic
Documente Profesional
Documente Cultură
Problem Statement:
A situation often arises in which data changes in one place, but many other components depend on this data. The classical example is user interface elements: when some internal data element changes all views that depend on this data have to be updated. We could solve the problem by propagate reusable. introducing direct calling dependencies the changes, but this solution is along which and to not
inflexible
general
change-propagation
Publisher-Subscriber Pattern One dedicated component takes the role of the publisher (called subject). All components dependent on changes in the publisher are its subscribers (called observers).
Class Model:
Use-Case Model:
S ubjec t M y app
O bs erver1
O bs erver2
Sequence Model:
: MyApp start : Subject :O bserv er1 : Observ er2
NotifyObserv ers
U pdate
Update
Activity Model:
MyApp
Subject
Observer1
Observer2
Java Implementation:
//Source file: C:\\Program Files\\Java\\jdk1.6.0_11\\bin\\Subject.java import java.util.Observable; import java.io.*; public class Subject extends Observable implements Runnable {
//Source file: C:\\Program Files\\Java\\jdk1.6.0_11\\bin\\Observer2.java import java.util.Observable; import java.util.Observer; /* this is Event Handler */ public class Observer2 implements Observer { private String resp;
*/
public static void main(String args[]) { System.out.print("Enter Text >"); // create an event source - reads from stdin Subject sub = new Subject(); // create an observer1 Observer1 obs1 = new Observer1(); // create an observer2 Observer2 obs2 = new Observer2(); // subscribe the Observer to the Subject sub.addObserver(obs2); sub.addObserver(obs1); // starts the event thread Thread thread = new Thread(sub); thread.start(); } }
Output:
C:\Program Files\Java\jdk1.6.0_11\bin>java MyApp Enter Text >Hello Received Response in Observer1: Hello Received Response in Observer2: Hello OOMD Received Response in Observer1: OOMD Received Response in Observer2: OOMD