2012-11-22 27 views
3

我有以下應用程序與自定義設備的接口。該應用程序用於對設備進行編程。在c中存儲設置的設計模式#

我的應用程序可以讀取設備的設置並將設置編程到設備。所以這意味着兩組設置;一組設置當前在設備中,另一組由用戶通過應用程序輸入。

有不同的設備類型,都有一些共同的設置和一些設備特定的設置。

我正在考慮兩個類,都有一套完整的設置。都使用單身人士,所以我可以輕鬆地訪問我整個項目的所有設置。但是這種感覺不對,在這種情況下的任何提示

+0

單身人士會很好 – MMK

+0

也許這是我,但問題是有點不清楚。 「有不同的設備類型......」 - 這使得它聽起來像你想要超過2班......或者你可以在任何時間只有1種設備類型? ...或者是設備類型的設置之一? – Dukeling

+0

我可以說,4個不同的設備,我應該能夠使用此工具進行編程。他們擁有75%的共同設置,其中25%的設置對設備來說是唯一的。如果連接了設備,則讀取設置,並且如果用戶輸入設置,則應該在按鈕點擊之後存儲和編程設置。我正在尋找最好的方式來存儲這些設置,以適應不同的設備類型,並在設備中編程並由用戶輸入。 – 2pietjuh2

回答

0

看看Command pattern。您可以將設置封裝在配置對象中,並將其用作控制器類的輸入。在控制器類配置了正確的參數後,您可以調用它的execute方法來處理數據。

也可以與State pattern加入這個或Strategy pattern切換處理算法(例如,在一個狀態中的處理可以包括將數據發送給設備,而在另一個從所述設備接收的話)。

1

不是設計模式,但我可能做到這一點:

// represents a device with it's settings 
public class Device 
{ 
    public string Type { get; set;} 

    public List<Setting> Settings { get; set; } 
} 

// represents a setting, agnostic of which device it applies to 
public class Setting 
{ 
    public string Setting { get; set; } 

    public string Value { get; set; } 
} 

// represents mapping which devices has which settings 
public class DeviceSettings 
{ 
    public List<string> ApplicableDevices { get; set; } 

    public List<Settings> ApplicableSettings { get; set; } 
} 

不要專注於使用的集合類型。我想你會有更多的屬性。

使用此設計,您可以在運行時定義設置並將它們分配給特定設備。

0

我可能做到這一點(我的C#是有點生疏了,所以不要指望語法是正確的):

class Settings 
{ 
    Settings parent = null; 
    Map<String, String> settings; 
    String getSetting(String setting) 
    { 
    if (settings.contains(setting)) 
     return settings.get(setting); 
    else if (parent != null) 
     return parent.getSetting(setting); 
    else return null; 
    } 
} 

那麼常用的設置是每個設備的家長和通用設置沒有父母。

如何訪問/創建這些類將取決於項目的結構。包含一組這些類的單身人士(可能在地圖(Map<String, Setting>))是一個想法。

以這種方式做事的好處是,子設置也可以選擇性地覆蓋它的父級設置。