最近做项目,经常要用到设备控制,控制的设备各种各样,如摄像机(焦距,预置位,转动),时序电源(开,关)等等,控制方式有网络方式,串口方式,甚至是第3方的API(如海康威视的产品),客户端操作的目的也不一样,有可能只想控制某个设备的开关,也可能是多个设备的联动(如一个场景的电影模式)。更进一步,你也许需要处理设备发回来的反馈。
功能这么多了,程序要怎么设计啊?最简单的方法就是不需要设计,用户按下什么按钮,就操作对应的设备执行什么功能,简单,容易实现。如果用极限编程,我就这么做的,用不了几分钟,任务就完成了。当然这样的代码没有重用性,也没办法与其他人合作。如果还有一点追求的话,得想想设计模式。
这里最好的设计模式就是Facade模式。这是一个非常简单的设计模式,但它确实能解决我前面提出的所有问题。
使用Facade模式,对客户端来说,不需要关心各种设备了,只需关心Facade类的接口。Facade类的设计也是非常简单的,就是提供各种操作的接口给客户端。
如需控制摄像机左转,右转 ,Facade类实现
public calss DeviceFacade{ //摄像机左转 public void static CameraLeft(){ Camara camera = new Camara(); camera.Left(); } //摄像机右转 public void static CameraRight(){ Camera camera = new Camera (); camera.Right(); }
客户端的调用:
//摄像机左转
DeviceFacade.CameraLeft();