Observer design Pattern - amresh087/newronaRepos GitHub Wiki
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=======================================
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();
}
}