我是Java世界的新手,并且在我的应用程序上有点挣扎。我将我的应用程序划分为多个层(UI,控制器,...)。底层负责从传感器收集数据。
我的目标是使这个图层可扩展,这样外部用户/程序员就可以轻松地在其中添加新的传感器。
我是否只需将每个传感器分开一个不同的类别,或者还有其他解决方案吗?
我很抱歉,如果它是一个奇怪的'问题,我只是一个新手:)
谢谢!
答案 0 :(得分:1)
底层可以有List<Gatherer> gatherers
个变量。收集者应该与底层重要的方法接口。
底层负责执行收集者,注册/删除等等。
答案 1 :(得分:1)
基本上你正在构建的是一个框架。传感器代码将遵循好莱坞原则:“不要打电话给我,我会打电话给你”
这是通过应用依赖性倒置原则来实现的。
您创建一个接口Sensor.java:
public interface Sensor {
Reading getReading();
}
一个Reading.java(使这个概述是一个开放的封闭原则挑战,与传感器数据结构需要多少一般性有关):
public final class Reading {
}
还有一个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();
}
}
答案 2 :(得分:0)
您可以使用许多机制。比如春天。你可以定义bean并在运行时包含它们(放在一个文件夹中),但bean必须实现一些定义良好的接口。
另一种解决方案是使用一些设计模式,例如