top of page

Observer Pattern

Observer pattern is used to observe any product availability, let's understand this by one example


Suppose i want to observe any phone which is currently out of stock , and whenever it will be available i want to notify all my interested users, let's assume these users are observer, and phone is observable.


Observable Interface

import java.util.ArrayList;
import java.util.List;

public interface Observable {
   List<Observer> observers = new ArrayList<>();
   void add(Observer observer);
   void remove(Observer observer);
   void setData(int num);
   int getData();
   void notifyObservers();

}

Observable implementation

import designPatterns.ObserverPattern1.Observer.Observer;

public class PhoneObservable implements Observable{
   private Integer quantity;
   public PhoneObservable(){
      quantity = 0;
   }
   @Override
   public void add(Observer observer) {
      observers.add(observer);
   }

   @Override
   public void remove(Observer observer) {
      observers.remove(observer);
   }

   @Override
   public void setData(int num) {
      quantity = quantity + num;
     if(quantity>0){
        notifyObservers();
     }
   }

   @Override
   public int getData() {
      return quantity;
   }

   @Override
   public void notifyObservers() {
       for(Observer observer: observers){
         observer.update();
      }
   }
}

Observer Interface (user)

package designPatterns.ObserverPattern1.Observer;

public interface Observer {
   void update();
}

Observer Implementation

import designPatterns.ObserverPattern1.Observable.PhoneObservable;

public class PhoneObserver implements Observer{
   private PhoneObservable phoneObservable;
   private String name;

   public PhoneObserver(PhoneObservable phoneObservable,String name){
      this.phoneObservable = phoneObservable;
      this.name = name;
   }
   @Override
   public void update() {
      System.out.println("hey "+ name + ",phone is now on stock, hurry up");
      System.out.println("number of iphone: "+ phoneObservable.getData());
   }
}

Main Class

import LLD.SnachAndLadder.Game;
import designPatterns.DecoratorPattern.BasePizza.BasePizza;
import designPatterns.DecoratorPattern.BasePizza.Magerita;
import designPatterns.DecoratorPattern.Decorator.ExtraCheese;
import designPatterns.DecoratorPattern.Decorator.Mashroom;
import designPatterns.DecoratorPattern.Decorator.Onion;
import designPatterns.ObserverPattern1.Observable.PhoneObservable;
import designPatterns.ObserverPattern1.Observer.PhoneObserver;
import designPatterns.StrategyPattern.NormalVehicle;
import designPatterns.StrategyPattern.SportVehicle;
import designPatterns.StrategyPattern.Vehicle;

public class Main {
   public static void main(String[] arr){
      testObserver();
   }
  
   public static void testObserver(){
      PhoneObservable iphone = new PhoneObservable();
      PhoneObserver phoneObserver1 = new PhoneObserver(iphone, "mannu");
      PhoneObserver phoneObserver2 = new PhoneObserver(iphone, "poter");
      iphone.add(phoneObserver1);
      iphone.add(phoneObserver2);
      iphone.setData(10);
   }
}

Using this design pattern we can easy notify subscribed user, whenever product will available.

Recent Posts

See All

Comments


Call 

7869617359

Email 

Follow

  • Facebook
  • Twitter
  • LinkedIn
  • Instagram
Never Miss a Post. Subscribe Now!

Thanks for submitting!

bottom of page