我試圖將戰略模式應用於特定情況,但是在如何避免將每個具體策略耦合到爲其提供數據的上下文對象方面存在問題。以下是幾種不同方式發生的模式的簡化情況,但應以類似的方式處理。避免與策略模式耦合
我們有一個對象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