Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Observer design pattern
- 1. Model the "independent" functionality with a "subject" abstraction
- 2. Model the "dependent" functionality with "observer" hierarchy
- 3. The Subject is coupled only to the Observer base class
- 4. Observers register themselves with the Subject
- 5. The Subject broadcasts events to all registered Observers
- 6. Observers "pull" the information they need from the Subject
- 7. Client configures the number and type of Observers
- package designpattern.observer_v1;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Scanner;
- abstract class Observer
- {
- protected Subject subject;
- public abstract void update();
- }
- class Subject
- {
- private List<Observer> observers = new ArrayList<>();
- private int state;
- public void add(Observer o)
- {
- observers.add(o);
- }
- public int getState()
- {
- return state;
- }
- public void setState(int value)
- {
- this.state = value;
- execute();
- }
- private void execute()
- {
- for(Observer observer : observers)
- {
- observer.update();
- }
- }
- }
- class HexObserver extends Observer
- {
- public HexObserver(Subject subject)
- {
- this.subject = subject;
- this.subject.add(this);
- }
- @Override
- public void update()
- {
- System.out.println("Hexa : " + Integer.toHexString(subject.getState()));
- }
- }
- class OctObserver extends Observer
- {
- public OctObserver(Subject subject)
- {
- this.subject = subject;
- this.subject.add(this);
- }
- @Override
- public void update()
- {
- System.out.println("Octal : " + Integer.toOctalString(subject.getState()));
- }
- }
- class BinObserver extends Observer
- {
- public BinObserver(Subject subject)
- {
- this.subject = subject;
- this.subject.add(this);
- }
- @Override
- public void update()
- {
- System.out.println("Binary : " + Integer.toBinaryString(subject.getState()));
- }
- }
- public class ObserverDemo
- {
- public static void main(String[] args)
- {
- Subject sub = new Subject();
- // client configures the number and type ofObserver
- new HexObserver(sub);
- new OctObserver(sub);
- new BinObserver(sub);
- Scanner scan = new Scanner(System.in);
- for(int i = 0;; i++)
- {
- System.out.print("Enter a Number : ");
- sub.setState(scan.nextInt());
- System.out.println("");
- }
- }
- }
Add Comment
Please, Sign In to add comment