Rahmadnet

ObserverPattern-v1

Mar 27th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.28 KB | None | 0 0
  1. Observer design pattern
  2.  
  3. 1. Model the "independent" functionality with a "subject" abstraction
  4. 2. Model the "dependent" functionality with "observer" hierarchy
  5. 3. The Subject is coupled only to the Observer base class
  6. 4. Observers register themselves with the Subject
  7. 5. The Subject broadcasts events to all registered Observers
  8. 6. Observers "pull" the information they need from the Subject
  9. 7. Client configures the number and type of Observers
  10.  
  11.  
  12. package designpattern.observer_v1;
  13.  
  14. import java.util.ArrayList;
  15. import java.util.List;
  16. import java.util.Scanner;
  17.  
  18. abstract class Observer
  19. {
  20.     protected Subject subject;
  21.     public abstract void update();
  22. }
  23.  
  24. class Subject
  25. {
  26.     private List<Observer> observers = new ArrayList<>();
  27.     private int state;
  28.    
  29.     public void add(Observer o)
  30.     {
  31.         observers.add(o);
  32.     }
  33.    
  34.     public int getState()
  35.     {
  36.         return state;
  37.     }
  38.    
  39.     public void setState(int value)
  40.     {
  41.         this.state = value;
  42.         execute();
  43.     }
  44.    
  45.     private void execute()
  46.     {
  47.         for(Observer observer : observers)
  48.         {
  49.             observer.update();
  50.         }
  51.     }
  52. }
  53.  
  54. class HexObserver extends Observer
  55. {
  56.     public HexObserver(Subject subject)
  57.     {
  58.         this.subject = subject;
  59.         this.subject.add(this);
  60.     }
  61.  
  62.     @Override
  63.     public void update()
  64.     {
  65.         System.out.println("Hexa   : " + Integer.toHexString(subject.getState()));
  66.     }
  67. }
  68.  
  69. class OctObserver extends Observer
  70. {
  71.     public OctObserver(Subject subject)
  72.     {
  73.         this.subject = subject;
  74.         this.subject.add(this);
  75.     }
  76.  
  77.     @Override
  78.     public void update()
  79.     {
  80.         System.out.println("Octal  : " + Integer.toOctalString(subject.getState()));
  81.     }
  82. }
  83.     class BinObserver extends Observer
  84.     {
  85.         public BinObserver(Subject subject)
  86.         {
  87.             this.subject = subject;
  88.             this.subject.add(this);
  89.         }
  90.  
  91.         @Override
  92.         public void update()
  93.         {
  94.             System.out.println("Binary : " + Integer.toBinaryString(subject.getState()));
  95.         }
  96.     }
  97.  
  98. public class ObserverDemo
  99. {
  100.     public static void main(String[] args)
  101.     {
  102.         Subject sub = new Subject();
  103.         // client configures the number and type ofObserver
  104.         new HexObserver(sub);
  105.         new OctObserver(sub);
  106.         new BinObserver(sub);
  107.         Scanner scan = new Scanner(System.in);
  108.        
  109.         for(int i = 0;; i++)
  110.         {
  111.             System.out.print("Enter a Number : ");
  112.            
  113.             sub.setState(scan.nextInt());
  114.             System.out.println("");
  115.         }
  116.     }
  117. }
Add Comment
Please, Sign In to add comment