package designpatterns;
/*
* Observer Pattern example
*/
class WeatherData {
float temperature;
float humidity;
public float getTemperature(){
return temperature;
}
public float getHumidity() {
return humidity;
}
public void setTemperature(float t) {
temperature = t;
}
public void setHumidity(float h) {
humidity = h;
}
}
/*
* The below interface adds functionality to add, remove subscribers/clients
* to the internal list so that they can be notified whenever the state of
* the weather changes.
*/
interface WeatherNotifier {
public void notify();
public void addListener(Object client);
public void removeListener(Object client);
}
/*
* WeatherData after implementing the above interface
*/
class WeatherData implements WeatherNotifier {
private List subscribers;
{
subscribers = new ArrayList();
}
public void notify() {
// notify/wake up all the subscribers to update their view with latest state information
Iterator iterator = subscribers.iterator();
while (iterator.hasNext()) {
iterator.next().update();
}
}
@Override
public void addListener(Object client) {
subscribers.add(client);
}
@Override
public void removeListener(Object client) {
subscribers.remove(client);
}
public void setTemperature(float t) {
temperature = t;
dataChanged();
}
public void setHumidity(float h) {
humidity = h;
dataChanged();
}
private void dataChanged() {
notify();
}
public float getTemperature(){
return temperature;
}
public float getHumidity() {
return humidity;
}
}
interface WeatherReader {
public void update();
}
class WeatherClient implements WeatherReader{
WeatherData source;
public void update() {
System.out.println("Temperature is " + source.getTemperature());
System.out.println("Humidity is " + source.getHumidity());
}
}
Writing code and seeing our application automating a task is a great fun to see.
Thursday, May 7, 2015
Observer Pattern example
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment