我试图将战略模式应用于特定情况,但是在如何避免将每个具体策略耦合到为其提供数据的上下文对象方面存在问题。以下是几种不同方式发生的模式的简化情况,但应以类似的方式处理。避免与策略模式耦合
我们有一个对象Acquisition
,它提供了与特定时间框架相关的数据 - 基本上是使用不同的硬件收集的一堆外部数据。由于它包含的数据量太大,所以我不想承担任何进一步的责任。我们现在需要采集一些这些数据,并根据一些配置向一块硬件发送相应的电压。
所以,想象一下以下(大大简化)类:
class Acquisition
{
public Int32 IntegrationTime { get; set; }
public Double Battery { get; set; }
public Double Signal { get; set; }
}
interface IAnalogOutputter
{
double getVoltage(Acquisition acq);
}
class BatteryAnalogOutputter : IAnalogOutputter
{
double getVoltage(Acquisition acq)
{
return acq.Battery;
}
}
现在,每一个具体的策略类必须被连接到我的采集类,这也是最有可能的类别之一,因为要修改它是我们应用程序的核心。这仍然是对旧设计的改进,这是一个巨大的开关语句里面的Acquisition
类。每种类型的数据可能有不同的转换方法(虽然Battery是一个简单的转接,其他转换方式并不那么简单),所以我觉得战略模式或类似的应该是一条路。
我也会注意到在最后的实现中,IAnalogOutputter
将是一个抽象类而不是接口。这些类将位于用户可配置并序列化为XML文件的列表中。该列表必须在运行时可编辑并记住,所以Serializable必须是我们最终解决方案的一部分。如果它有所作为。
我该如何确保每个实现类都能获得所需的数据,而无需将它绑定到我最重要的类之一上?还是我以完全错误的方式处理这类问题?
澄清 - 采集数据包含约20条信息,所有这些信息将被各种电压输出器使用。每个实现只使用一个数据段,但是电压输出器的不同可能实现方式会有相同数量(20个)。那么,我如何从'Acquisition'获取到'另一个类将它传递给策略实现者?'?不过,关于序列化的好处,我肯定会考虑。 – drharris 2011-05-04 22:33:00