1

我是 Java 世界的新手,我的应用程序有点挣扎。我将我的应用程序分为几个层(UI、控制器、...)。底层负责从传感器收集数据。

我的目标是使这一层可扩展,以便外部用户/程序员可以轻松地在其中添加新传感器。

我是否只需将每个传感器分成不同的类别,还是有其他解决方案?

如果这是一个“奇怪”的问题,我很抱歉,我只是一个新手:)

谢谢!

4

3 回答 3

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();
    }
}
于 2015-11-11T12:59:37.553 回答
1

底层可以有List<Gatherer> gatherers变量。Gatherer 应该是与底层重要的方法的接口。

然后任何人都可以创建自己的 Gatherer 并将其注册到您的层。

底层负责执行收集器,注册/删除它们等。

于 2015-11-11T12:22:01.323 回答
0

您可以使用许多机制。例如春天。您可以定义 bean 并在运行时包含它们(放在文件夹中),但是 bean 必须实现一些定义良好的接口。

另一种解决方案是使用一些设计模式,例如

观察者

模板法

于 2015-11-11T12:51:11.420 回答