Observer design Pattern - amresh087/newronaRepos GitHub Wiki

Example 1

🧩 Simple Real-Life Example

Think of YouTube 🔔 subscription

You subscribe to a channel

When the creator uploads video → you get notification

  interface Observer {
    void update(String message);
  }


  class User implements Observer {
      public void update(String message) {
          System.out.println("Received: " + message);
      }
  }



  class Channel {
      List<Observer> users = new ArrayList<>();

      void subscribe(Observer o) {
          users.add(o);
      }

      void notifyAllUsers(String msg) {
          for (Observer o : users) {
              o.update(msg);
          }
      }
  }



  Channel channel = new Channel();

  Observer u1 = new User();
  channel.subscribe(u1);

  channel.notifyAllUsers("New Video Uploaded!");

=================Observer design Pattern=======================================

Example 2

package com.opencodez.util;

public interface Observer {

public void update(float interest);

}

=====================Subject=================================

package com.opencodez.util;

public interface Subject { public void registerObserver(Observer observer);

public void removeObserver(Observer observer);

public void notifyObservers();

}

========================Loan===================

package com.opencodez.util;

import java.util.ArrayList;

public class Loan implements Subject {

private ArrayList<Observer> observers = new ArrayList<Observer>();

private String type;

private float interest;

private String bank;






public Loan(String type, float interest, String bank)
{

   
    this.type = type;
    this.interest = interest;
    this.bank = bank;
}


public String getType()
{

    return type;
}


public void setType(String type)
{

    this.type = type;
}


public float getInterest()
{

    return interest;
}


public void setInterest(float interest)
{

    this.interest = interest;
}


public String getBank()
{

    return bank;
}


public void setBank(String bank)
{

    this.bank = bank;
}

@Override
public void registerObserver(Observer observer)
{

    observers.add(observer);
    
}

@Override
public void removeObserver(Observer observer)
{

    observers.remove(observer);
    
}

@Override
public void notifyObservers()
{
    System.out.println("Notifying Observers on change in Loan interest rate");

    for (Observer ob : observers) {
        
        ob.update(this.interest);
    }
    
}

}

======================Newspaper==============================

package com.opencodez.util;

public class Newspaper implements Observer {

@Override
public void update(float interest)
{

    System.out.println("Newspaper: Interest Rate updated, new Rate is: "+ interest);
    
}

}

=================Internet====================

package com.opencodez.util;

public class Internet implements Observer {

@Override
public void update(float interest)
{

    System.out.println("Internet: Interest Rate updated, new Rate is: "+ interest);
    
}

}

================ObserverTest==============================

package com.opencodez.util;

public class ObserverTest {

public static void main(String[] args)
{
    Newspaper printMedia = new Newspaper();

    Internet onlineMedia = new Internet();
    
    Loan personalLoan = new Loan("Personal Loan", 12.5f,"Standard Charterd");
    
    personalLoan.registerObserver(printMedia);

    personalLoan.registerObserver(onlineMedia);
    
    personalLoan.setInterest(13.8f);
    
    
    personalLoan.notifyObservers();
    
}

}

⚠️ **GitHub.com Fallback** ⚠️