import java.util.ArrayList;
import java.util.List;
/**
* {@link <a href=
* "https://[Log in to view URL]"
* target= "_blank"></a>}
*
* @author itammb ( Italia Massimiliano Buscati )
* @version JDK 1.15
*
*/
class Main {
public interface Publisher {
// primitive di gestione notifica
void addSubscriber(Subscriber subscriber);
void removeSubscriber(Subscriber subscriber);
void notifySubscribers();
}
public static class WeatherStation implements Publisher {
private List<Subscriber> subscribers;
private float temperature;
private float humidity;
public WeatherStation() {
this.subscribers = new ArrayList<>();
}
@Override
public void addSubscriber(Subscriber subscriber) {
subscribers.add(subscriber);
}
@Override
public void removeSubscriber(Subscriber subscriber) {
subscribers.remove(subscriber);
}
@Override
public void notifySubscribers() {
for (Subscriber subscriber : subscribers)
subscriber.update(temperature, humidity);
}
public void setMeasurements(float temperature, float humidity) {
this.temperature = temperature;
this.humidity = humidity;
// notifica a tutti i sotoscrittori il cambiamento di stato
notifySubscribers();
}
}
public interface Subscriber {
void update(float temperature, float humidity);
}
public static class WeatherDisplay implements Subscriber {
private float temperature;
private float humidity;
@Override
public void update(float temperature, float humidity) {
this.temperature = temperature;
this.humidity = humidity;
display();
}
public void display() {
System.out.println("Current conditions: " + temperature + "C degrees and " + humidity + "% humidity");
}
}
public static void main(String args[]) {
// Unit test - uso del design pattern: observer
WeatherStation weatherStation = new WeatherStation();
// crea un sottoscrittore
WeatherDisplay display1 = new WeatherDisplay();
WeatherDisplay display2 = new WeatherDisplay();
// registra un sottoscrittore per una notifica
weatherStation.addSubscriber(display1);
weatherStation.addSubscriber(display2);
// simula il cambiamento di stato e il meccanismo di notifica
weatherStation.setMeasurements(25.5f, 65.0f);
weatherStation.setMeasurements(27.3f, 70.0f);
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: