Here Observable is a Subject, Publisher,
Event etc
Observer is listner, Subscriber etc
Suppose there is a weather station which
issues the weather warning . All the TV channels gets the update from this
weather station. So weather station is a subject.
And TV channels are the Observer.
public interface Publisher {
public void addSubscriber(Subscriber subscriber);
public void removeSubscriber(Subscriber subscriber);
public void notifySubscribers(String
string);
}
class WeatherStation implements Publisher {
private String warning;
void releaseWarning(String string) {
this.warning = string;
notifySubscribers(warning);
}
ArrayList<Subscriber> arrayList = new ArrayList<Subscriber>();
@Override
public void addSubscriber(Subscriber subscriber) {
arrayList.add(subscriber);
}
@Override
public void removeSubscriber(Subscriber subscriber) {
arrayList.remove(subscriber);
}
@Override
public void notifySubscribers(String string)
{
for (Subscriber s : arrayList) {
s.getNotification4mPublisher(string);
}
}
}
Now we have a interface Subscriber
interface Subscriber {
public void getNotification4mPublisher(String string);
}
class AaaTak implements Subscriber {
@Override
public void getNotification4mPublisher(String string) {
System.out.println("AaaTak
WEATHER WARNING " + string);
}
}
class StarNews implements Subscriber {
@Override
public void getNotification4mPublisher(String string) {
System.out.println("StarNews
WEATHER WARNING " + string);
}
}
class ZeeNews implements Subscriber {
@Override
public void getNotification4mPublisher(String string) {
System.out.println("ZeeNews
WEATHER WARNING " + string);
}
}
public class TestObsrverPattern {
public static void
main(String[] args) {
WeatherStation station
= new
WeatherStation();
AaaTak aaaTak = new AaaTak();
StarNews news = new StarNews();
ZeeNews news2 = new ZeeNews();
station.addSubscriber(aaaTak);
station.addSubscriber(news);
station.addSubscriber(news2);
station.notifySubscribers("Heavy rains expected in NEW
York ");
}
}
This can also be achieved by Observer class
in java.util package
public class WeatherStation extends Observable{
private String warning;
void releaseWarning(String string) {
this.warning = string;
setChanged(); //this is mandatory
//clearChanged();
notifyObservers(warning);
}
}
public class StarTV implements Observer {
@Override
public void update(Observable subject, Object object) {
System.out.println(subject.hasChanged() + " --> " + object);
}
}
class ZeeTv implements Observer {
@Override
public void update(Observable subject, Object object) {
subject.notifyObservers();
System.out.println("
--> " + object);
}
}
public static void
main(String[] args) {
WeatherStation weatherStation = new WeatherStation();
ZeeTv ztv = new ZeeTv();
StarTV starTV = new StarTV();
weatherStation.addObserver(ztv);
weatherStation.addObserver(starTV);
weatherStation.releaseWarning("Heavy rains expected in NEW York ");
weatherStation.releaseWarning("Heavy rains expected in Minneapolis ");
}

No comments:
Post a Comment