Observer Pattern
- Manbodh ratre
- Nov 19, 2023
- 1 min read
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.







Comments