1

建物の「火災およびセキュリティ警報監視システム」に属する次の状況を考えてみてください。

Zone、およびの 3 つのクラスがControllerありCameraます。Controller建物の中央制御装置に似ています。にオブジェクトの配列があるようにControllerを制御します。コントローラーは、カメラからのデータの読み取り、カメラの電源のオフ、電源のオン、データベースへのデータの記録など、さまざまなタスクを実行できます。CameraCameraController

コントローラー.java

    public class Controller
    {
            private Camera[] camera;

             public byte[] getVideo()
            {
            }
    }

Zone クラスはコントローラからデータを読み取り、コマンドをコントローラに渡します。

Zone.java

 public Zone extends JPanel
    {
             private Controller ctrl;
    }

これらのゾーンは建物の「部屋」に似ているため、6 つのゾーン オブジェクトがあります。ゾーンが異なればカメラの数も異なり、異なるコマンドがController

6 つのゾーン オブジェクトがあっても、コントローラーは 1 つである必要があります。これは中央のコントロール ユニットであり、ゾーンごとに異なるコントロール ユニットを配置することはできません。ただし、「コントローラー」には、異なるゾーンに属する異なるカメラ オブジェクトが必要です。たとえば、ゾーン 1 に 5 台のカメラ、ゾーン 2 に 2 台のカメラなどです。したがって、コントローラはさまざまな方法でカメラ オブジェクトを制御できます。

コントローラーは、建物全体にも影響を与えることを行います。たとえば、セキュリティ アラームの発生。

ただし、ゾーンごとに新しい Controller オブジェクトを作成すると、建物全体に影響するタスクを実行できなくなります。コントローラーを単一パターンにすると、ゾーンごとに異なるカメラ オブジェクトを作成し、ゲッター メソッドを使用してそれらのデータを個別に取得することができなくなります。

では、どうすれば両方を達成できますか?繰り返しになりますが、建物には部屋の数に対してコントローラーを配置できないため、コントローラーは1つにする必要があると思います。

4

3 に答える 3

4

1 つとs を含むsControllerが必要なようです。ZoneCamera

public class Controller {

    private ArrayList<Zone> zones;

}

... と ...

public class Zone {

    private ArrayList<Camera> cameras;

    public byte[] getVideo() {
        //...
    }
}

このように、Controllerはすべての への参照を持ちます(適切なゲッターとセッターがあると仮定するZoneと、間接的にすべての への参照があります)。また、補足として、デザインによっては、「ビデオ」がすべてのフィードのコレクションでない限り、クラスに参加Cameraする方が理にかなっている可能性があります。getVideo()CameraCamera

于 2013-03-18T17:43:24.263 に答える
1

私の理解に基づいて、私は行きます:

  • Zone オブジェクトを作成するための静的メソッドを持つ 1 つのシングルトン コントローラー
  • このコントローラーには、インスタンス変数として複数の Zone オブジェクトも含まれます。 HAS-A 関係
  • Camera オブジェクトを作成し、それらをインスタンス変数として保持できる Zone オブジェクト : HAS-A 関係

この方法はより論理的に見えます

于 2013-03-18T17:46:03.013 に答える
0

正しく理解できた場合、次の 2 つのオプションがあります。

オプション 1: Zoneカメラのリストが含まれています。

オプション 2: からへControllerのマップを含む:ZoneCamera

public class Controller {
  Map<Zone, Camera> zoneCameras;
  ...
}
于 2013-03-18T17:46:58.510 に答える