在 Java 中创建图层 modular/extensible
Making a layer modular/extensible in Java
我是 Java 世界的新手,我的申请有点困难。我将我的应用程序分为几个层(UI、控制器、...)。底层负责从传感器收集数据。
我的目标是使这一层可扩展,这样外部 users/programmers 就可以轻松地在其中添加新的传感器。
我只需要将每个传感器分开 class 还是有任何其他解决方案?
如果这是一个 'weird' 问题,我很抱歉,我只是一个新手 :)
谢谢!
底层可以有List<Gatherer> gatherers
变量。 Gatherer 应该与对底层重要的方法接口。
然后任何人都可以创建自己的 Gatherer 并将其注册到您的图层。
底层负责执行gatherer,registering/removing他们等等
您可以使用多种机制。例如 Spring。您可以定义 beans 并在运行时包含它们(放在文件夹中),但 beans 必须实现一些定义良好的接口。
另一种解决方案是使用一些设计模式,例如
本质上,您正在构建的是一个框架。传感器代码将遵循好莱坞原则:"don't call me, I'll call you"
这是通过应用依赖倒置原则实现的。
你创建了一个接口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
}
}
}
上面的都是框架,后面的都是application/client代码。
还有一个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();
}
}
我是 Java 世界的新手,我的申请有点困难。我将我的应用程序分为几个层(UI、控制器、...)。底层负责从传感器收集数据。
我的目标是使这一层可扩展,这样外部 users/programmers 就可以轻松地在其中添加新的传感器。
我只需要将每个传感器分开 class 还是有任何其他解决方案?
如果这是一个 'weird' 问题,我很抱歉,我只是一个新手 :)
谢谢!
底层可以有List<Gatherer> gatherers
变量。 Gatherer 应该与对底层重要的方法接口。
然后任何人都可以创建自己的 Gatherer 并将其注册到您的图层。
底层负责执行gatherer,registering/removing他们等等
您可以使用多种机制。例如 Spring。您可以定义 beans 并在运行时包含它们(放在文件夹中),但 beans 必须实现一些定义良好的接口。
另一种解决方案是使用一些设计模式,例如
本质上,您正在构建的是一个框架。传感器代码将遵循好莱坞原则:"don't call me, I'll call you"
这是通过应用依赖倒置原则实现的。
你创建了一个接口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
}
}
}
上面的都是框架,后面的都是application/client代码。
还有一个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();
}
}