如何创建包含不限于一个实例的数据的Object类的单个实例?

时间:2013-03-18 17:39:33

标签: java class oop

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

我有3个课程,ZoneControllerCameraController类似于建筑物的中央控制单元。 Controller控制Camera,因此Camera中有一组Controller个对象。控制器能够执行各种任务,例如从摄像机读取数据,关闭摄像机,打开,将数据记录到数据库等。

Controller.java

    public class Controller
    {
            private Camera[] camera;

             public byte[] getVideo()
            {
            }
    }

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

Zone.java

 public Zone extends JPanel
    {
             private Controller ctrl;
    }

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

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

Controller也会对整个建筑物产生影响。例如,提高安全警报。

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

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

3 个答案:

答案 0 :(得分:4)

听起来你想要一个Controller,以及一堆带有Zone s的Camera

public class Controller {

    private ArrayList<Zone> zones;

}

......和......

public class Zone {

    private ArrayList<Camera> cameras;

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

这样,Controller引用了所有Zone s(以及间接地,所有Camera s,假设您有适当的getter和setter)。另外,作为旁注,根据您的设计,让getVideo()成为Camera类的一部分可能更有意义,除非“视频”是所有Camera的集合。 s'饲料。

答案 1 :(得分:1)

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

  • 1 Singleton Controller,具有创建Zone对象的静态方法
  • 此Controller还将多个Zone对象作为实例变量:HAS-A relationship
  • 区域对象可以创建Camera对象并将其保存为实例变量:HAS-A relationship

这种方式似乎更合乎逻辑

答案 2 :(得分:0)

如果我找对你,你有两种选择:

选项1: Zone包含相机列表。

选项2: Controller包含从ZoneCamera的地图:

public class Controller {
  Map<Zone, Camera> zoneCameras;
  ...
}