🗒 Задача¶
Необходимо разработать простую систему мониторинга погодных условий, которая будет собирать данные о температуре и количестве осадков.
Создай абстрактный класс WeatherStationStats. Он будет служить родителем для классов-объектов погодных данных: Temperature и PrecipitationAmount.
Реализуй логику имитации отправки сообщения на сервер в классе WeatherServer. Метод отправки сообщения должен принимать объект типа WeatherStationStats и, в зависимости от типа переданного объекта, выводить соответствующие данные.
Создай по одному объекту для разных типов погодных данных и протестируй работу программы.
❌ Ошибки¶
- дочерние классы не имеют полей со значениями для инициализации
✏️ Комментарии¶
Хорошо, но предлагаю для большей безопасности учесть вариант, что могут прийти данные, не относящиеся к этим двум классам.
В этом классе следует добавить метод, например, sendMessage().
Метод должен принимать объекты температуры или осадков. И внутри уже распределять какой именно сообщение отправляется. Но какой тип указать в качестве входного параметра в функцию?
Это довольно популярный паттерн, когда на входе у метода базовый тип данных, а внутри в зависимости от конкретного типа, разное поведение. Этот паттерн еще называют "Команда": [https://refactoring.guru/ru/design-patterns/command](https://refactoring.guru/ru/design-patterns/command)
🧾 Решение¶
abstract class WeatherStationStats
class Temperature(val value: Double) : WeatherStationStats()
class PrecipitationAmount(val value: Double) : WeatherStationStats()
class WeatherServer {
fun sendMessage(weatherData: WeatherStationStats) {
when (weatherData) {
is Temperature -> {
println("Отправка данных о температуре: ${weatherData.value}°C на сервер")
}
is PrecipitationAmount -> {
println("Отправка данных о количестве осадков: ${weatherData.value} мм на сервер")
}
else -> {
println("Неизвестный тип данных")
}
}
}
}
fun main() {
val temperatureData = Temperature(20.5)
val precipitationData = PrecipitationAmount(15.2)
val weatherServer = WeatherServer()
weatherServer.sendMessage(temperatureData)
weatherServer.sendMessage(precipitationData)
}