Advanced Java September 27 ,2025

Observer Design Pattern in Java

1. Introduction

The Observer Pattern is used when you want one object (called Subject) to notify multiple objects (Observers) automatically whenever its state changes.
This pattern follows the Publisher-Subscriber model.

2. Real-World Analogy

Think about YouTube Notifications:

  • A Channel (Subject) has multiple Subscribers (Observers).
  • Whenever the channel uploads a new video, all subscribers get notified.
  • The channel doesn’t know who exactly is watching, it just broadcasts.

3. Structure of Observer Pattern

  • Subject → Maintains a list of observers and notifies them of changes.
  • Observer → Defines the update method to receive notifications.
  • Concrete Subject → Implements Subject, stores state.
  • Concrete Observers → Implement Observer, react to updates.

4. Custom Implementation Example

Let’s create a YouTube Channel – Subscriber Notification System.

Step 1 – Observer Interface

public interface Observer {
    void update(String videoTitle);
}

Step 2 – Subject Interface

public interface Subject {
    void subscribe(Observer observer);
    void unsubscribe(Observer observer);
    void notifyObservers(String videoTitle);
}

Step 3 – Concrete Subject (YouTubeChannel)

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

public class YouTubeChannel implements Subject {
    private List subscribers = new ArrayList<>();
    private String channelName;

    public YouTubeChannel(String channelName) {
        this.channelName = channelName;
    }

    @Override
    public void subscribe(Observer observer) {
        subscribers.add(observer);
        System.out.println("New subscriber added!");
    }

    @Override
    public void unsubscribe(Observer observer) {
        subscribers.remove(observer);
        System.out.println("Subscriber removed!");
    }

    @Override
    public void notifyObservers(String videoTitle) {
        System.out.println("\n" + channelName + " uploaded: " + videoTitle);
        for (Observer observer : subscribers) {
            observer.update(videoTitle);
        }
    }
}

Step 4 – Concrete Observers (Subscribers)

public class Subscriber implements Observer {
    private String name;

    public Subscriber(String name) {
        this.name = name;
    }

    @Override
    public void update(String videoTitle) {
        System.out.println(name + " received notification: New video uploaded - " + videoTitle);
    }
}

Step 5 – Client Code

public class ObserverPatternDemo {
    public static void main(String[] args) {
        YouTubeChannel channel = new YouTubeChannel("TechWithJava");

        Observer s1 = new Subscriber("Alice");
        Observer s2 = new Subscriber("Bob");
        Observer s3 = new Subscriber("Charlie");

        channel.subscribe(s1);
        channel.subscribe(s2);
        channel.subscribe(s3);

        channel.notifyObservers("Observer Pattern Tutorial");

        channel.unsubscribe(s2);

        channel.notifyObservers("Memento Pattern Tutorial");
    }
}

5. Output

New subscriber added!
New subscriber added!
New subscriber added!

TechWithJava uploaded: Observer Pattern Tutorial
Alice received notification: New video uploaded - Observer Pattern Tutorial
Bob received notification: New video uploaded - Observer Pattern Tutorial
Charlie received notification: New video uploaded - Observer Pattern Tutorial

Subscriber removed!

TechWithJava uploaded: Memento Pattern Tutorial
Alice received notification: New video uploaded - Memento Pattern Tutorial
Charlie received notification: New video uploaded - Memento Pattern Tutorial

6. Advantages

  • Implements a loose coupling between subject and observers.
  • Supports broadcast communication easily.
  • Makes the system more scalable since multiple observers can be added dynamically.

7. Real-World Use Cases

  • YouTube / Instagram notifications.
  • Stock market monitoring systems.
  • Weather forecasting apps.
  • Event-driven systems like GUIs.

 

 

Next- State Design Pattern in Java

 

Sanjiv
0

You must logged in to post comments.

Related Blogs

Generics P...
Advanced Java August 08 ,2025

Generics Part- 2

Collection...
Advanced Java July 07 ,2025

Collections Framewor...

Mastering...
Advanced Java August 08 ,2025

Mastering Java Multi...

Annotation...
Advanced Java August 08 ,2025

Annotations

Java Memor...
Advanced Java August 08 ,2025

Java Memory Manageme...

Java Lambd...
Advanced Java August 08 ,2025

Java Lambda Expressi...

Java Funct...
Advanced Java August 08 ,2025

Java Functional Inte...

Java Strea...
Advanced Java August 08 ,2025

Java Stream API

JDBC (Java...
Advanced Java August 08 ,2025

JDBC (Java Database...

JDBC (Java...
Advanced Java September 09 ,2025

JDBC (Java Database...

Annotation...
Advanced Java August 08 ,2025

Annotations

Generics
Advanced Java August 08 ,2025

Generics

Java I/O (...
Advanced Java August 08 ,2025

Java I/O (NIO)

Introducti...
Advanced Java September 09 ,2025

Introduction to Desi...

Design Pat...
Advanced Java September 09 ,2025

Design Patterns in J...

Other Prin...
Advanced Java September 09 ,2025

Other Principles Beh...

Creational...
Advanced Java September 09 ,2025

Creational Design Pa...

In Creatio...
Advanced Java September 09 ,2025

In Creational Design...

In Creatio...
Advanced Java September 09 ,2025

In Creational Design...

Creational...
Advanced Java September 09 ,2025

Creational Design Pa...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

In Creatio...
Advanced Java September 09 ,2025

In Creational Design...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Builder De...
Advanced Java September 09 ,2025

Builder Design Patte...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Structural...
Advanced Java September 09 ,2025

Structural Design Pa...

Design Pat...
Advanced Java September 09 ,2025

Design Patterns in J...

Chain of R...
Advanced Java September 09 ,2025

Chain of Responsibil...

Command De...
Advanced Java September 09 ,2025

Command Design Patte...

Interprete...
Advanced Java September 09 ,2025

Interpreter Design P...

Iterator D...
Advanced Java September 09 ,2025

Iterator Design Patt...

Mediator D...
Advanced Java September 09 ,2025

Mediator Design Patt...

Memento De...
Advanced Java September 09 ,2025

Memento Design Patte...

State Desi...
Advanced Java September 09 ,2025

State Design Pattern...

Strategy D...
Advanced Java September 09 ,2025

Strategy Design Patt...

Template M...
Advanced Java September 09 ,2025

Template Method Desi...

Visitor De...
Advanced Java September 09 ,2025

Visitor Design Patte...

Prototype...
Advanced Java September 09 ,2025

Prototype Design Pat...

Java 8+ Fe...
Advanced Java October 10 ,2025

Java 8+ Features

SOLID Prin...
Advanced Java October 10 ,2025

SOLID Principles in...

Custom Imp...
Advanced Java October 10 ,2025

Custom Implementatio...

Custom Imp...
Advanced Java October 10 ,2025

Custom Implementatio...

Custom Imp...
Advanced Java October 10 ,2025

Custom Implementatio...

Custom Imp...
Advanced Java October 10 ,2025

Custom Implementatio...

How Iterat...
Advanced Java October 10 ,2025

How Iterators Work i...

How Concur...
Advanced Java October 10 ,2025

How ConcurrentHashMa...

Comparable...
Advanced Java October 10 ,2025

Comparable vs Compar...

Get In Touch

G06, Kristal Olivine Bellandur near Bangalore Central Mall, Bangalore Karnataka, 560103

+91-8076082435

techiefreak87@gmail.com