首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建包含不限于一个实例的数据的类对象的单个实例?

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

Stack Overflow用户
提问于 2013-03-18 17:39:33
回答 3查看 159关注 0票数 1

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

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

Controller.java

代码语言:javascript
复制
    public class Controller
    {
            private Camera[] camera;

             public byte[] getVideo()
            {
            }
    }

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

Zone.java

代码语言:javascript
复制
 public Zone extends JPanel
    {
             private Controller ctrl;
    }

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

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

控制器所做的事情对整个建筑也有影响。举个例子,提高安全警报。

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

那么,我怎样才能做到这两者呢?再说一遍,我认为应该有一个控制器,因为一幢大楼不可能有多少个房间的控制器。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-18 17:43:24

听起来,您需要一个Controller,以及一堆带有CameraZone

代码语言:javascript
复制
public class Controller {

    private ArrayList<Zone> zones;

}

..。还有..。

代码语言:javascript
复制
public class Zone {

    private ArrayList<Camera> cameras;

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

这样,Controller就可以引用所有的Zone(并间接地引用所有的Camera,假设您有适当的getter和setter)。另外,顺便指出,根据您的设计,让getVideo()成为Camera类的一部分可能更有意义,除非“视频”是所有Camera的提要的集合。

票数 4
EN

Stack Overflow用户

发布于 2013-03-18 17:46:03

根据我的理解,我想:

  • 1单例控制器,它具有创建区域对象的静态方法
  • 此控制器中还将有多个Zone对象作为实例变量:
  • 区域对象,它可以创建照相机对象并将它们作为实例变量保存:

这种方式似乎更符合逻辑

票数 1
EN

Stack Overflow用户

发布于 2013-03-18 17:46:58

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

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

选项2: Controller包含从ZoneCamera的映射

代码语言:javascript
复制
public class Controller {
  Map<Zone, Camera> zoneCameras;
  ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15483301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档