请考虑以下情况,这是属于一个“火灾和安全警报监测系统”的建筑物。
我有三门课,Zone,Controller和Camera。Controller类似于建筑物的中央控制单元。Controller控制Camera,因此Controller中有一个Camera对象数组。控制器能够完成各种任务,如从摄像机读取数据,关闭摄像机,打开,将数据记录到数据库等。
Controller.java
public class Controller
{
private Camera[] camera;
public byte[] getVideo()
{
}
}Zone类从控制器读取数据,并将命令传递给控制器。
Zone.java
public Zone extends JPanel
{
private Controller ctrl;
}有6个区域对象,因为这些区域类似于建筑物中的“房间”。不同的区域将有不同数量的摄像机,并将不同的命令传递给Controller。
即使有6个区域对象,也应该有一个控制器,因为它是中央控制单元,对于不同的区域不可能有不同的控制单元。但是“控制器”应该有不同的网络、不同的摄像机对象,它们属于不同的区域。例如,5个摄像机用于zone1,2个摄像机用于区域2等,因此控制器可以以不同的方式控制摄像机对象。
控制器所做的事情对整个建筑也有影响。举个例子,提高安全警报。
但是,如果我为每个区域创建新的Controller对象,那么我将无法执行对整个建筑有影响的任务。如果我制作控制器单列模式,那么我将无法为不同的区域创建不同的相机对象,并使用getter方法分别获取它们的数据。
那么,我怎样才能做到这两者呢?再说一遍,我认为应该有一个控制器,因为一幢大楼不可能有多少个房间的控制器。
发布于 2013-03-18 17:43:24
听起来,您需要一个Controller,以及一堆带有Camera的Zone。
public class Controller {
private ArrayList<Zone> zones;
}..。还有..。
public class Zone {
private ArrayList<Camera> cameras;
public byte[] getVideo() {
//...
}
}这样,Controller就可以引用所有的Zone(并间接地引用所有的Camera,假设您有适当的getter和setter)。另外,顺便指出,根据您的设计,让getVideo()成为Camera类的一部分可能更有意义,除非“视频”是所有Camera的提要的集合。
发布于 2013-03-18 17:46:03
根据我的理解,我想:
这种方式似乎更符合逻辑
发布于 2013-03-18 17:46:58
如果我说得对,你有两个选择:
选项1: Zone包含一个摄像机列表。
选项2: Controller包含从Zone到Camera的映射
public class Controller {
Map<Zone, Camera> zoneCameras;
...
}https://stackoverflow.com/questions/15483301
复制相似问题