Advertisement
Guest User

Two Levels Observer

a guest
Mar 15th, 2015
414
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.92 KB | None | 0 0
  1.  
  2. import java.util.ArrayList;
  3.  
  4. /**
  5.  *
  6.  * @author LeFex
  7.  */
  8. public class Test {
  9.  
  10.     /**
  11.      * @param args the command line arguments
  12.      */
  13.     public static void main(String[] args) {
  14.         IObservable observable = new ConcreteObservable();
  15.         IObserver observer = new ConcreteObserver(observable);
  16.         observable.register(observer);
  17.         ConcreteObserverAndObservable middle = new ConcreteObserverAndObservable(observable);
  18.         observable.register(middle);
  19.         IObserver secondHandObserver = new ConcreteObserver(middle);
  20.         middle.register(secondHandObserver);
  21.        
  22.         observable.doStuff("HELLO");
  23.         observable.updateObservers();
  24.     }
  25.    
  26. }
  27.  
  28. interface IObserver{
  29.    
  30.     public void update();
  31.    
  32. }
  33.  
  34. interface IObservable{
  35.    
  36.     public void updateObservers();
  37.     public void register(IObserver obs);
  38.     public void unRegister(IObserver obs);
  39.     public String getData();
  40.     public void doStuff(String stuff);
  41. }
  42.  
  43. class ConcreteObservable implements IObservable{
  44.    
  45.     private ArrayList<IObserver> mObservers = new ArrayList<>();
  46.     private String mData = "";
  47.  
  48.     @Override
  49.     public void updateObservers() {
  50.         for(IObserver o : mObservers){
  51.             o.update();
  52.         }
  53.     }
  54.  
  55.     @Override
  56.     public void register(IObserver obs) {
  57.         mObservers.add(obs);
  58.     }
  59.  
  60.     @Override
  61.     public void unRegister(IObserver obs) {
  62.         mObservers.remove(obs);
  63.     }
  64.  
  65.     @Override
  66.     public String getData() {
  67.         return mData;
  68.         }
  69.  
  70.     @Override
  71.     public void doStuff(String stuff) {
  72.         mData = stuff;
  73.     }
  74. }
  75.  
  76. class ConcreteObserver implements IObserver{
  77.  
  78.     private IObservable mSubject;
  79.    
  80.     public ConcreteObserver(IObservable subject){
  81.         mSubject = subject;
  82.     }
  83.    
  84.     @Override
  85.     public void update() {
  86.         String data = mSubject.getData();
  87.         System.out.println(data);
  88.     }
  89.    
  90. }
  91.  
  92. class ConcreteObserverAndObservable implements IObservable, IObserver{
  93.    
  94.     private ArrayList<IObserver> mObservers = new ArrayList<>();
  95.     private String mData = "";
  96.     private IObservable mSubject;
  97.    
  98.     public ConcreteObserverAndObservable(IObservable subject){
  99.          mSubject = subject;
  100.     }
  101.  
  102.     @Override
  103.     public void updateObservers() {
  104.         for(IObserver o : mObservers){
  105.             o.update();
  106.         }
  107.     }
  108.  
  109.     @Override
  110.     public void register(IObserver obs) {
  111.         mObservers.add(obs);
  112.     }
  113.  
  114.     @Override
  115.     public void unRegister(IObserver obs) {
  116.         mObservers.remove(obs);
  117.     }
  118.  
  119.     @Override
  120.     public String getData() {
  121.         return mData;
  122.     }
  123.  
  124.     @Override
  125.     public void update() {
  126.         String temp = mSubject.getData();
  127.         mData = temp + " " + temp;
  128.         updateObservers();
  129.     }
  130.  
  131.     @Override
  132.     public void doStuff(String stuff) {
  133.         mData = stuff;
  134.     }
  135.    
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement