请考虑以下情况,该情况属于建筑物的“消防和安全警报监控系统”。
我有3个课程,Zone
,Controller
和Camera
。 Controller
类似于建筑物的中央控制单元。 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方法单独获取它们的数据。
那么,我怎样才能实现这两者呢?同样,我认为应该有一个控制器,因为建筑物不能有多个房间数量的控制器。
答案 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)
根据我的理解,我会选择:
这种方式似乎更合乎逻辑
答案 2 :(得分:0)
如果我找对你,你有两种选择:
选项1:
Zone
包含相机列表。
选项2:
Controller
包含从Zone
到Camera
的地图:
public class Controller {
Map<Zone, Camera> zoneCameras;
...
}