1

私は Java の世界に不慣れで、自分のアプリケーションに少し苦労しています。アプリケーションをいくつかのレイヤー (UI、コントローラーなど) に分割しました。最下層は、センサーからのデータ収集を担当します。

私の目標は、外部ユーザー/プログラマーが新しいセンサーを簡単に追加できるように、このレイヤーを拡張可能にすることです。

各センサーを個別のクラスに分離するだけでよいですか、それとも他の解決策はありますか?

それが「奇妙な」質問である場合、私の謝罪、私はただの初心者です:)

ありがとう!

4

3 に答える 3

1

基本的に、構築しているのはフレームワークです。センサー コードは、ハリウッドの原則に従います。「電話しないでください。電話します」

これは、依存性逆転の原則を適用することによって実現されます。

インターフェイス 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();
    }
}
于 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 に答える