Observer
design pattern
This works on the principle
of many-to-one subscriber: publisher concept.
public interface Subject {
public void
addObserver(Observer ob);
public void
removeObserver(Observer ob);
public void
notifyObservers(Message msg);
}
public class WeatherStationBroadcasterSubject implements Subject {
private
Set<Observer> observerList = new HashSet<Observer>();
@Override
public void
addObserver(Observer ob) {
observerList.add(ob);
}
@Override
public void
removeObserver(Observer ob) {
observerList.remove(ob);
}
@Override
public void
notifyObservers(Message msg) {
Iterator<Observer>
it = observerList.iterator();
while(it.hasNext()) {
it.next().update(msg);
}
}
}
public interface Observer {
public void update(Message
msg);
}
public class MobileObserver implements Observer {
@Override
public void update(Message
msg) {
System.out.println("Mobile Phone Observer : Weather data changed ::
"+msg.getMessage());
}
}
public class SmartWatchObserver implements Observer {
@Override
public void update(Message
msg) {
System.out.println("Smart Watch Observer : Weather data changed ::
"+msg.getMessage());
}
}
public class Message {
private String message;
public Message(String
message) {
super();
this.message = message;
}
public String
getMessage() {
return message;
}
}
public class MainClass {
public static void main(String[]
args) {
Subject
subject = new WeatherStationBroadcasterSubject();
Observer
observer1 = new MobileObserver();
subject.addObserver(observer1);
Message
msg = new Message("It's a hot
day");
subject.notifyObservers(msg);
Observer
observer2 = new SmartWatchObserver();
subject.addObserver(observer2);
msg
= new Message("It's a cold
day");
subject.notifyObservers(msg);
subject.removeObserver(observer1);
msg
= new Message("It's a
cloudy day");
subject.notifyObservers(msg);
}
}
Result :
Mobile Phone Observer : Weather data
changed :: It's a hot day
Mobile Phone Observer : Weather data
changed :: It's a cold day
Smart Watch Observer : Weather data
changed :: It's a cold day
Smart Watch Observer : Weather data
changed :: It's a cloudy day
Code link : https://github.com/sksumit1/DesignPatterns
Code link : https://github.com/sksumit1/DesignPatterns
No comments:
Post a Comment