1. Write a java program that utilize the observer pattern to simulate the follow
ID: 3832472 • Letter: 1
Question
1. Write a java program that utilize the observer pattern to simulate the following scenario. Three subscribers received news from a publisher. There are three news messages that are sent to all the subscribers "First Message "Second Message and "Third message". When the subscriber receives the message, the program needs to display "Observer 1 received First Message.", etc. A good example of Observer Pattern in java can be found there: https: Mwww.tutorialspoint.fom/design pattern/observer pattern.htmExplanation / Answer
Hi,
Please seebelow the classes and output.
Please comment for any queries/updates.
Thanks.
MySubject.java
import java.util.ArrayList;
import java.util.List;
public class MySubject {
private List<MyObserver> observers = new ArrayList<MyObserver>();
private String message;
public String getMessage() {
return message;
}
public void sendMessage(String message) {
this.message = message;
notifyAllObservers();
}
public void attach(MyObserver observer){
observers.add(observer);
}
public void notifyAllObservers(){
//Calling update method of each Observer to update the new message
for (MyObserver observer : observers) {
observer.update();
}
}
}
MyObserver.java
public abstract class MyObserver {
protected MySubject subject;
public abstract void update();
}
ObserverOne.java
public class ObserverOne extends MyObserver{
public ObserverOne(MySubject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println( "Observer 1 received " +subject.getMessage() );
}
}
ObserverTwo.java
public class ObserverTwo extends MyObserver{
public ObserverTwo(MySubject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println( "Observer 2 received " +subject.getMessage() );
}
}
ObserverThree.java
public class ObserverThree extends MyObserver{
public ObserverThree(MySubject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println( "Observer 3 received " +subject.getMessage() );
}
}
MyObsereverDemo.java
public class MyObsereverDemo {
//Main method to send message
public static void main(String[] args) {
MySubject subject = new MySubject();
new ObserverOne(subject);
new ObserverTwo(subject);
new ObserverThree(subject);
System.out.println("Sending First Message..");
subject.sendMessage("First Message");
System.out.println("Sending Second Message..");
subject.sendMessage("Second Message");
System.out.println("Sending Third Message..");
subject.sendMessage("Third Message");
}
}
Sample output:
Sending First Message..
Observer 1 received First Message
Observer 2 received First Message
Observer 3 received First Message
Sending Second Message..
Observer 1 received Second Message
Observer 2 received Second Message
Observer 3 received Second Message
Sending Third Message..
Observer 1 received Third Message
Observer 2 received Third Message
Observer 3 received Third Message
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.