Fornecer uma interface unificada para um conjunto de interfaces em um subsistema.
No projeto de um aparelho para IoT (Internet of Things), são adicionados sensores de diversos tipos como, por exemplo, sensor de temperatura, de umidade, de luminosidade, etc. Cada sensor tem uma interface diferente, oriunda do seu fabricante e da sua forma de funcionamento. Alguns sensores podem retornar strings, números ou valores que necessitam de tratamento especial para gerar um resultado útil ao cliente. Esse resultado será exibido em um painel como uma string (por ex.,"30ºC"). Em alguns casos, o resultado pode demandar que determinados sensores trabalhem em conjunto (por ex. vários sensores de umidade no mesmo aparelho) na obtenção de um único valor calculado (por ex. a média de umidade). A classe IotSystem funciona como uma fachada e reúne as classes TemperatureSensor, HumiditySensor e LuminositySensor que implementam a funcionalidade do sistema IoT, sem ocultá-las completamente.
package com.padroesdr.facade;
public interface SensorInformation {
public String getStatus();
}
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package com.padroesdr.facade;
/**
*
* @author Adriano Gonçalves
*/
public class LuminositySensor {
public float readValue() {
// Do something and return the result
return (float) ((float) Math.random() * 100.);
}
}
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package com.padroesdr.facade;
/**
*
* @author Adriano Gonçalves
*/
public class HumiditySensor {
public float readValue() {
// Do something and return the result
return (float) ((float) Math.random() * 100.);
}
}
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package com.padroesdr.facade;
/**
*
* @author Adriano Gonçalves
*/
public class IoTSystem implements SensorInformation {
@Override
public String getStatus() {
TemperatureSensor temperatureSensor = new TemperatureSensor();
HumiditySensor humiditySensor = new HumiditySensor();
LuminositySensor luminositySensor = new LuminositySensor();
float temperature = temperatureSensor.readValue();
float humidity = humiditySensor.readValue();
float luminosity = luminositySensor.readValue();
if (temperature > 35. && humidity < 20 && luminosity > 70) {
return "Desert feelings";
} else if (temperature > 35. && humidity > 80 && luminosity < 50) {
return "Rainning tropical forest";
} else if (humidity < 30) {
return "Kinda dry.";
} else if (temperature < -30.) {
return "Are you in Siberia??";
} else {
return "ok";
}
}
}
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package com.padroesdr.facade;
/**
*
* @author Adriano Gonçalves
*/
public class Principal {
public static void main(String[] args) {
SensorInformation atmosphereAvaliation = new IoTSystem();
System.out.println("Atmosphere situation: " + atmosphereAvaliation.getStatus());
}
}
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package com.padroesdr.facade;
/**
*
* @author Adriano Gonçalves
*/
public class TemperatureSensor {
public float readValue() {
// Do something and return the result
return (float) ((Math.random() * 100.) * (Math.random() < 0.5 ? 1. : -1.));
}
}