在Java中使层模块化/可扩展

时间:2015-11-11 12:15:14

标签: java extensible

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

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 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必须实现一些定义良好的接口。

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

Observer

Template method