Observer in Java 2
2016.05.30 21:04
Observer in Java 2
Observer design pattern
- Model the "independent" functionality with a "subject" abstraction
- Model the "dependent" functionality with "observer" hierarchy
- The Subject is coupled only to the Observer base class
- Observers register themselves with the Subject
- The Subject broadcasts events to all registered Observers
- Observers "pull" the information they need from the Subject
- Client configures the number and type of Observers
abstract class Observer {
protected Subject subj;
public abstract void update();
}
class HexObserver extends Observer {
public HexObserver( Subject s ) {
subj = s;
subj.attach( this );
}
public void update() {
System.out.print( " " + Integer.toHexString( subj.getState() ) );
}
} // Observers "pull" information
class OctObserver extends Observer {
public OctObserver( Subject s ) {
subj = s;
subj.attach( this );
}
public void update() {
System.out.print( " " + Integer.toOctalString( subj.getState() ) );
}
} // Observers "pull" information
class BinObserver extends Observer {
public BinObserver( Subject s ) {
subj = s;
subj.attach( this ); } // Observers register themselves
public void update() {
System.out.print( " " + Integer.toBinaryString( subj.getState() ) );
}
}
class Subject {
private Observer[] observers = new Observer[9];
private int totalObs = 0;
private int state;
public void attach( Observer o ) {
observers[totalObs++] = o;
}
public int getState() {
return state;
}
public void setState( int in ) {
state = in;
notify();
}
private void notify() {
for (int i=0; i < totalObs; i++) {
observers[i].update();
}
}
}
public class ObserverDemo {
public static void main( String[] args ) {
Subject sub = new Subject();
// Client configures the number and type of Observers
new HexObserver( sub );
new OctObserver( sub );
new BinObserver( sub );
Scanner scan = new Scanner();
while (true) {
System.out.print( "\nEnter a number: " );
sub.setState( scan.nextInt() );
}
}
}
Output
Enter a number: 15 f 17 1111 Enter a number: 17 11 21 10001 Enter a number: 31 1f 37 11111
[출처] https://sourcemaking.com/design_patterns/observer
본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.