@startuml interface Sensor { + {abstract} int Value() } class LMSensor { - Identifier: string + int Value() } class GPUSensor { + int Value() } class HWMONFan { - Identifier: string - RPMSensor: Sensor - PWMControl: PWMControl + int RPM() + void PWM(value: int) } class PWMControl { + void PWM(value: int) + int PWM() } class LMSensorsFacade { + List RPMSensors() + List TemperatureSensors() } class GPUSensorsFacade { + List TemperatureSensors() } class SensorManager { - LMSensorsFacade - GPUSensorsFacade + List RPMSensors() + List TemperatureSensors() } class FanGenerator { + FanList FindFans(List, List) } HWMONFan -- Sensor HWMONFan -- PWMControl Sensor <|-- LMSensor Sensor <|-- GPUSensor SensorManager - Sensor LMSensor -- LMSensorsFacade GPUSensor -- GPUSensorsFacade LMSensorsFacade -- SensorManager GPUSensorsFacade -- SensorManager FanGenerator - HWMONFan FanGenerator - SensorManager FanGenerator - PWMControl @enduml