【发布时间】:2019-06-07 16:19:56
【问题描述】:
我正在尝试创建各种性能监视器以在刨花板(基于 STM32)上运行。我习惯用 c 编程,所以 OOP 方法有点新,但我认为它很适合这里。
出于这个问题的目的,假设我有两种类型的监视器:
- 频率。应用程序可以调用监视器的“tick”方法来计算自上次运行以来的时间并将其存储。
- Period - 调用监视器的“开始”和“停止”方法来计算进程运行和存储所需的时间。
我想做的是在整个应用程序中创建这些监视器的实例,并能够从主模块报告所有类型的所有监视器的统计信息。
我读过单例设计模式,这似乎是我需要的,但我不确定,我也担心线程安全。
我想我将创建一个“StatMonitor”类和一个派生类“FrequencyMonitor”和“PeriodMonitor”。 Monitor 将是一个单例,在任何我想创建一个新监视器的地方我都会请求一个“Monitor”实例并像这样使用它:
freqMonitor * task1FreqMonitor = StatMonitor::GetInstance()->Add_Freq_Monitor("Task1");
StatMonitor 将跟踪我添加的所有监视器,当我想打印统计信息时,我可以调用 printAll 方法,该方法将迭代它的监视器数组并请求它们的结果,如下所示:
StatMonitor::GetInstance()->PrintAllStats();
我走在正确的道路上吗?
【问题讨论】:
-
您可以创建一个 Registrar Singleton,允许注册和检索特定类型的监视器。
-
另一种选择是使用 Abstract Factory 设计模式。