【问题标题】:Acquisition accumulator (software design)采集累加器(软件设计)
【发布时间】:2012-05-01 10:41:30
【问题描述】:

我需要一些软件设计方面的帮助。假设我有一台相机,它可以获取数据,将它们发送到过滤器,并一次显示一个图像。

现在,我想要的是等待两张图像,然后将这两张图像发送到过滤器,然后将它们都发送到屏幕。

我想到了两种选择,我想知道选择哪一种: 在我的 Acquisitioner(或其他)类中,我是否应该放置一个等待两张图像的队列,然后再将它们发送到 Filterer 类? 我应该在 Acquisitionner 和 Filterer 之间放置一个 Accumulator 类吗?

最终两者都会起作用,但你认为哪一个会更好?

谢谢!

【问题讨论】:

  • 是否不断地获取图像(例如以固定速率)?你需要重复这个过程,还是只做一次?过滤器处理是否具有确定性(就时间而言)?有内存限制吗?管道的其余部分如何工作?有太多悬而未决的问题,无法给出一个(正确)答案。

标签: c++ architecture software-design acquisition


【解决方案1】:

为了给出直接的答案,我会在一个单独的对象中实现 Accumulator 策略。原因如下:

在过去从事类似的设计工作时,我发现将此模型中的不同“参与者”视为 sourcessinks 非常有帮助。 source 对象将能够生成或输出图像到附加的 sink 对象。该系统中的过滤器或累加器将被设计为管道——换句话说,它们将实现接收器的接口。一旦你想出了一种连接通用源、管道和接收器的机制,就很容易将累积策略实现为管道,对于接收到的每个nth 图像,如果n 是奇数,它将保持它, 如果n 是偶数,则输出它们。

一旦您有了这个系统,您就可以轻松更改源(图像文件阅读器、电影解码器、相机捕捉接口)、接收器(图像文件或电影编码器、显示查看器等)和管道(过滤器、累加器、编码器、多路复用器),而不会破坏您的其余代码。

【讨论】:

    【解决方案2】:

    这取决于。但是,如果您的队列所做的只是等待第二张图像的出现,我认为您可以简单地在 Acquisitioner 中实现它。

    另一方面,如果您想在其中加入任何额外的功能,那么增加模块化和随之而来的所有好处都不会受到丝毫伤害。

    在这种特殊情况下,我认为这并不重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      • 2019-05-24
      • 2011-04-04
      相关资源
      最近更新 更多