Salve a tutti ragazzi!
Sono nuovo e spero di non fare subito danni aprendo questo topic
L'esercizio che sto per postare riguarda la costruzione di una stazione di monitoraggio del tempo basata sul tipo TempoAggiornato che tiene traccia delle condizioni di tempo : Temperatura, Umidità e Pressione.
L'obiettivo è di creare un applicazione che visualizzi in tempo reale: le attuali condizioni, le statistiche sul tempo e una semplice previsione del tempo.
Ora posterò il codice dell'esercizio svolto con le mie domande.
Le Interfacce:
Qual'è la funzione della classe Subject?
public interface Subject
{
void registraObserver(Observer o);
void rimuoviObserver(Observer o);
void notificaObservers();
}
public interface Observer
{
void update(double temp, double umidita, double press);
}
La classe TempoAggiornato:
Come è possibile istanziare un oggetto della classe Observer?Essendo una interfaccia non si potrebbe o sbaglio? Eppure viene preso come paramentro dai metodi di Subject.
public class TempoAggiornato implements Subject
{
private double temperatura;
private double umidita;
private double pressione;
private ArrayList<Observer> observers = new ArrayList<Observer>();
@Override
public void registraObserver(Observer o)
{
observers.add(o);
}
@Override
public void rimuoviObserver(Observer o)
{
observers.remove(o);
}
@Override
public void notificaObservers()
{
for (Observer o : observers) o.update(temperatura, umidita, pressione);
}
}
Classe DisplayCondizioniAttuali:
Non capisco il costruttore della classe e il "(this)" nel costruttore.
public class DispayCondizioniAttuali extends Display implements Observer
{
private double temperatura;
private double pressione;
private double umidita;
private Subject subject;
public DispayCondizioniAttuali(Subject subject)
{
this.subject = subject;
subject.registraObserver(this);
}
@Override
public void display()
{
System.out.println("Condizioni attuali: temp ="+temperatura+", umidita: ="+umidita+", pressione ="+pressione);
}
@Override
public void update(double temp, double umidita, double press)
{
this.temperatura = temp;
this.umidita = umidita;
this.pressione = press;
display();
}
}
Classe Display:
abstract public class Display
{
abstract public void display();
}
In generale ragazzi non capisco la meccanica di questo pattern. Mi servirebbe una illuminazione. Accetto tutto, anche esempi inventati da voi che possano risultarvi più semplici da spiegare.
Vi ringrazio anticipatamente.