Observer pattern: Defines a one-to-many dependency between objects so that when an object changes state, all its dependents are notified and updated automatically.
Here is a specific example:
Two observers, Binaryobserver's update converts setstate incoming integers into binary, octaobserver to octal.
Interface Subject { private list<observer> observers; Public void registerobserver (Observer o); Public void removeobserver (Observer o); Public void notifyallobservers ();}
Public classConcreteSubject implements subject{PrivateList<observer>observers=NewArraylist<observer>(); Private intState ; Public intgetState () {returnState ; } Public voidSetState (intState ) { This. State =State ; Notifyallobservers (); } Public voidregisterobserver (Observer Observer) {observers.add (Observer); } Public voidremoveobserver (Observer Observer) {inti =OBSERVERS.INDEXOF (Observer); if(I >= 0) Observers.remove (i); } Public voidnotifyallobservers () { for(Observer observer:observers) {observer.update (); } } }
Abstract Observer { publicabstractvoid update ();}
Public class Implements observer{Subject Subject; Public binaryobserver (Subject Subject) { this. Subject = Subject; this. Subject.attach (this); } @Override publicvoid update () { "Binary String:" + Integer.tobinarystring (Subject.getstate ()));} }
Public class Implements observer{ Subject Subject; Public octalobserver (Subject Subject) { this. Subject = Subject; this. Subject.attach (this); } @Override publicvoid update () { "octal String:" + Integer.tooctalstring (Subject.getstate ()));} }
Test code:
New NEW New binaryobserver (subject );
Subject.registerobserver (o);
Subject.registerobserver (b); subject.setstate,subject.setstate (10);
There are addactionlistener methods that use observer patterns, such as JButton, in swing.
Observer mode (Observer pattern)