The observer pattern consists of four roles: abstract subject role, abstract observer role, specific subject role, abstract observer role, and specific observer role .
Abstract Theme Role (Subject): Save references to all observer roles in a collection, and can have any number of observers. It provides an interface to add, remove observers, and to send notifications to registered observers.
specific topic role (Observer): A concrete class that implements the interface provided by the abstract theme role.
Abstract Observer Role (ConcreteSubject): Provides an excuse to receive notifications sent by the subject role.
specific observer role (CONCRETEOBSERVER): A concrete class that implements the interface provided by the abstract observer role.
class Diagram
Java code:
PackageCom.observer;Importjava.util.ArrayList;Importjava.util.List;/*** Abstract theme characters, being observed *@authorHyp **/ Public Interfacesubject{voidAddwatcher (Watcher Watcher); voidRemovewatcher (Watcher Watcher); voidNotify (String message);}/*** Abstract observer role, viewing subject *@authorHyp **/ Public Interfacewatcher{voidUpdate (String message);/*** Specific Theme characters *@authorHyp **/ Public classConcreteSubjectImplementssubject{Privatelist<watcher> watchers =NewArraylist<watcher>(); @Override Public voidAddwatcher (Watcher Watcher) {Watchers.add (watcher); } @Override Public voidRemovewatcher (Watcher Watcher) {watchers.remove (watcher); } @Override Public voidNotify (String message) { for(Watcher W:watchers) {w.update (message); } }}/*** Specific Viewer orange *@authorHyp **/ Public classConcretewatcherImplementswatcher{@Override Public voidUpdate (String message) {System.out.println ( This. toString () + ":" +message); }}/*** Test Viewer mode *@authorHyp **/ Public classtest{ Public Static voidMain (string[] args) {Subject Subject=NewConcreteSubject (); Watcher Watcher1=NewConcretewatcher (); Watcher Watcher2=NewConcretewatcher (); Watcher Watcher3=NewConcretewatcher (); Subject.addwatcher (watcher1);//Add ObserverSubject.addwatcher (WATCHER2); Subject.addwatcher (WATCHER3); Subject.notify ("Hello");//Notify all observersSubject.removewatcher (watcher1);//Removing an observerSubject.notify ("Bye~"); }}
Viewer mode of Programming mode (Observer)