基本的に、構築しているのはフレームワークです。センサー コードは、ハリウッドの原則に従います。「電話しないでください。電話します」
これは、依存性逆転の原則を適用することによって実現されます。
インターフェイス Sensor.java を作成します。
public interface Sensor {
Reading getReading();
}
そして、Reading.java (これを一般化することは、センサー データ構造に必要な一般性に関連する Open Closed Principle の課題です):
public final class Reading {
}
そしてaa SensorReader.java:
public final class SensorReader {
private final Iterable<Sensor> sensors;
public SensorReader(Iterable<Sensor> sensors) {
this.sensors = sensors;
}
public void readSensors() {
for (Sensor sensor : sensors) {
Reading reading = sensor.getReading();
// so stuff with reading
}
}
}
ここより上はすべてフレームワークで、ここから先はすべてアプリケーション/クライアント コードです。
そして MotorEncoder.java:
final class MotorEncoder implements Sensor {
@Override
public Reading getReading() {
// do stuff to actually read motor encoder
return new Reading();
}
}
そして Application.java:
import java.util.Arrays;
public final class Application {
public static void main(String[] args) {
Sensor sensor = new MotorEncoder();
SensorReader sensorReader = new SensorReader(Arrays.asList(sensor));
sensorReader.readSensors();
}
}