![]() |
1
1
我可能会这样做:
我假设detectmotion()存储帧,否则您必须将其保存在一个待处理的列表中,直到需要清除它为止。无论如何,帧泵从实际设备/文件中获取单个帧。这就是工作。运动检测器负责检测运动,并将包含运动的帧组传递给framegrouplistener,然后由framegrouplistener执行所需的任何操作。 通过这种方式,类与职责很好地分开,并且很少以有状态的方式完成——所有状态都被本地化为单个类。由于这些调用都是空的,因此如果需要,可以将它们调度到任意线程。 框架泵可能在某种类型的计时器循环上被触发。 我可能会考虑将分组算法分成一个单独的类——让MotionDetector类吐出每一帧,同时发出一个bool,指示是否检测到运动,然后MotionGrouper类将这些帧单独放入,并根据需要的算法吐出帧列表。”“检测运动”和“确定如何对帧进行分组”显然是两个职责。但是,在这种一般的管道设计中,应该很清楚如何进行重构。 |
![]() |
2
3
Consumer类正在做MotionDetector应该做的工作。也许MotionDetector构造器(或类中的某个方法)应该采用帧流,而这项工作应该在内部完成。在算法运行之后,类应该只公开必需的图像数组。 |
![]() |
3
1
如果我正确理解了你的问题,你不喜欢你的类的客户必须使用你提供的方法…
然后你可以像这样使用它:
否则(如果它对您的应用程序有意义),您可能会这样做:
编辑 关于使用评论中建议的事件让消费者知道所捕获的组:
|