1

请考虑以下情况,属于建筑物的“火灾和安全报警监控系统”。

我有 3 个班级ZoneControllerCameraController类似于建筑物的中央控制单元。Controller控制s 所以在 . 中有一个对象Camera数组。控制器能够执行各种任务,例如从摄像头读取数据、关闭摄像头、打开、将数据记录到数据库等。CameraController

控制器.java

    public class Controller
    {
            private Camera[] camera;

             public byte[] getVideo()
            {
            }
    }

Zone 类从控制器读取数据,并将命令传递给控制器​​。

区域.java

 public Zone extends JPanel
    {
             private Controller ctrl;
    }

有 6 个区域对象,因为这些区域类似于建筑物中的“房间”。不同的区域将有不同数量的摄像机,并将不同的命令传递给Controller

即使有 6 个区域对象,也应该有一个 Controller,因为它是中央控制单元,不同的区域不能有不同的不同控制单元。但是“控制器”应该有不同的相机对象,它们属于不同的区域。例如,区域 1 有 5 个摄像头,区域 2 有 2 个摄像头等。因此控制器可以以不同的方式控制摄像头对象。

控制器所做的事情也会影响到整个建筑物。例如,发出安全警报。

但是,如果我为每个区域创建新的控制器对象,那么我将无法执行影响到整个建筑物的任务。如果我制作控制器单列模式,那么我将无法为不同的区域创建不同的相机对象并使用 getter 方法单独获取它们的数据。

那么,我怎样才能实现两者呢?同样,我认为应该有一个控制器,因为建筑物不能有多个房间数量的控制器。

4

3 回答 3

4

听起来你想要一个Controller,还有一堆Zones 和Cameras。

public class Controller {

    private ArrayList<Zone> zones;

}

... 和 ...

public class Zone {

    private ArrayList<Camera> cameras;

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

这样,Controller引用了所有Zones(并且间接地,所有Cameras,假设您有适当的 getter 和 setter)。此外,作为旁注,根据您的设计,成为课程getVideo()的一部分可能更有意义Camera,除非“视频”是所有Cameras 提要的集合。

于 2013-03-18T17:43:24.263 回答
1

根据我的理解,我会选择:

  • 1 个单例控制器,它具有创建区域对象的静态方法
  • 这个 Controller 中也会有多个 Zone 对象作为实例变量:HAS-A 关系
  • 可以创建相机对象并将它们作为实例变量保存的区域对象:HAS-A 关系

这种方式似乎更合乎逻辑

于 2013-03-18T17:46:03.013 回答
0

如果我说对了,你有两个选择:

选项 1: Zone包含摄像机列表。

选项 2: Controller包含从Zone到的映射Camera

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