dev-resources.site
for different kinds of informations.
Understanding the Observer Design Pattern in Java
Published at
8/3/2024
Categories
designpatterns
observer
java
softwareengineering
Author
diegosilva13
Author
12 person written this
diegosilva13
open
Understanding the Observer Design Pattern in Java
Problem
The Observer pattern addresses the need to automatically notify a set of objects (observers) when the state of another object (subject) changes. This is useful in scenarios where one object needs to stay updated with changes in another object, such as in event-driven systems or notification systems.
Solution
The Observer pattern involves two main components:
- Subject: The object that holds some state and notifies observers about changes to this state.
- Observer: The interface that defines the update method, which is called by the subject to notify observers of changes.
The subject maintains a list of observers and notifies them by calling their update methods whenever there is a change in its state.
Pros and Cons
Pros
- Decoupling: The pattern promotes loose coupling between the subject and observers, allowing them to evolve independently.
- Reactivity: Enables observers to automatically receive updates when the subject's state changes, supporting the development of reactive systems.
- Extensibility: New observers can be added without modifying the existing subject or other observers' code.
Cons
- Complexity: Can introduce additional complexity, especially in systems with many observers and frequent events.
- Observer Management: Managing the lifecycle of observers, including registration and removal, can be complex.
- Potential Performance Issues: Notifying a large number of observers can impact performance, especially if the update methods are complex.
Example of Real-World Application
A practical example of the Observer pattern is in social media notification systems, where users (observers) are notified of their friends' (subjects) activities, such as posts and status updates.
Example Code in Java
public interface Observer {
void update(String message);
}
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
public class SocialMediaAccount implements Subject {
private List<Observer> observers = new ArrayList<>();
private String statusUpdate;
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(statusUpdate);
}
}
public void postUpdate(String status) {
this.statusUpdate = status;
notifyObservers();
}
}
public class Follower implements Observer {
private String name;
public Follower(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " received update: " + message);
}
}
public class Client {
public static void main(String[] args) {
SocialMediaAccount account = new SocialMediaAccount();
Observer follower1 = new Follower("Alice");
Observer follower2 = new Follower("Bob");
account.registerObserver(follower1);
account.registerObserver(follower2);
account.postUpdate("Hello, followers!");
account.postUpdate("Check out my new post!");
account.removeObserver(follower1);
account.postUpdate("Another update!");
}
}
observer Article's
20 articles in total
Understanding the Observer Design Pattern in Java
currently reading
Efficient and Flexible Communication in Software Architecture: Swift custom implementation of NotificationCenter
read article
Optimizing the Use of Laravel Observer and Mutator: An All-Inclusive Guide with Practical Examples
read article
C# Delegates In Practice — Implementing Observer Pattern With Delegates
read article
Build Own version of Redux toolkit using Observer design pattern.
read article
Understanding Laravel Model Observer, and Testing Using the Underlying Model
read article
The observer pattern and binary sizes
read article
Observers in Laravel
read article
Flutter WidgetsBindingObserver
read article
📏 Resize Observer API
read article
⚛️ React Intersection Observer 👀 Hook 🪝.
read article
How to clear cache using Events or Observers in Laravel | Tutorial
read article
Dynamic Dimension React Container with Transition Effect - Part 2, Resize Observer
read article
Design Pattern in Python (2): Observer
read article
The Observer Pattern
read article
Typescript - `willSet` e `didSet` com decorators
read article
Observer Pattern: Conceito e exemplo
read article
Observer in PHP [Design pattern with examples]
read article
Diving into the great observer pattern in javascript
read article
Implementing the Observer pattern in JavaScript
read article
Featured ones: