module observer.delivery.statiscticdisplay; import observer.delivery.displayelement; import observer.delivery.observer; import observer.delivery.weatherdata; import std.stdio : writeln; import std.format : format; class StatisticsDisplay : Observer, DisplayElement { private: float maxTemp = 0.0f; float minTemp = 200; float tempSum= 0.0f; int numReadings; public: this(WeatherData weatherData) { weatherData.registerObserver(this); } override void update(float temperature, float humidity, float pressure) { tempSum += temperature; numReadings++; if (temperature > maxTemp) { maxTemp = temperature; } if (temperature < minTemp) { minTemp = temperature; } display(); } override void display() { writeln("Avg/Max/Min temperature = ", (tempSum / numReadings), '/', maxTemp, '/', minTemp); // writeln("Avg/Max/Min temperature = ".format(temperature), "F degrees and %3.1f%% humidity".format(humidity)); } }