2015-07-12 230 views
0

我剛剛開始學習C#中的設計模式。需要c#設計模式的建議

我有兩個組合框,並且當第一個組合框選擇項被更改時,我需要更改第二個組合框的內容。 (而不是使用Switch語句),我無法在這裏應用設計模式(我假設的工廠設計模式 - 從我目前閱讀的內容)。

class SomeClass 
{ 
    private const string CONST_LANG_1 = "LANGUAGE_1"; 
    private const string CONST_LANG_2 = "LANGUAGE_2"; 
    private const string CONST_LANG_3 = "LANGUAGE_3"; 
    private const string CONST_LANG_4 = "LANGUAGE_4"; 
    // ... 

    private const string CONST_LANG_1_SPK_1 = "SPEAKER_1_1"; 
    private const string CONST_LANG_1_SPK_2 = "SPEAKER_1_2"; 
    private const string CONST_LANG_2_SPK_1 = "SPEAKER_2_1"; 
    private const string CONST_LANG_2_SPK_2 = "SPEAKER_2_2"; 
    private const string CONST_LANG_3_SPK_1 = "SPEAKER_3_1"; 
    private const string CONST_LANG_3_SPK_2 = "SPEAKER_3_2"; 
    private const string CONST_LANG_4_SPK_1 = "SPEAKER_4_1"; 
    private const string CONST_LANG_4_SPK_2 = "SPEAKER_4_2"; 
    // ... 

    private void cmbSelectLanguageDEMO_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     switch(cmbSelectLanguageDEMO.SelectedIndex) 
     { 
      case 0: // CONST_LANG_1 -> Populate cmbSelectSpeakerDEMO 
       break; 

      case 1: // CONST_LANG_2 -> Populate cmbSelectSpeakerDEMO 
       break; 

      // ... 
     } 
    } 
} 

有人可以幫我申請一個設計模式嗎?我真的很想學習如何在我的項目中實現設計模式。

任何幫助將不勝感激!

回答

2

我沒有爲我的建議設計一個名稱。但這裏是我現在可以考慮的最好的設計:)

interface Lang { 
    void List<String> speakers(); 
} 

class Lang1 : Lang { 
    public override void List<String> speakers() { 
     return ...; 
    } 
} 

class Lang2 : Lang { 
    public override void List<String> speakers() { 
     return ...; 
    } 
} 

List<Lang> langs = new List<>(); 
int idx = 0; 
langs[idx++] = new Lang1(); 
langs[idx++] = new Lang2(); 

private void cmbSelectLanguageDEMO_SelectedIndexChanged(object sender, EventArgs e) { 
    cmbSelectSpeakerDEMO.Items.AddRange(langs[cmbSelectLanguageDEMO.SelectedIndex].speakers()); 
} 
1

看一看策略模式https://en.wikipedia.org/wiki/Strategy_pattern

private void cmbSelectLanguageDEMO_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Action[] selectLanguageStrategies = {LoadLang1, LoadLang2 }; 
     selectLanguageStrategies[cmbSelectLanguageDEMO.SelectedIndex](); 
    } 

    private void LoadLang1() 
    { 
     // CONST_LANG_1 -> Populate cmbSelectSpeakerDEMO 
    } 

    private void LoadLang2() 
    { 
     // CONST_LANG_2 -> Populate cmbSelectSpeakerDEMO 
    } 
0

不確定響應是否遲到。也許有人會尋找類似的解決方案。 我覺得觀察者模式可能是你正在尋找的。如果你有一個對象的狀態改變應該被通知給其他對象,那麼你使用觀察者模式。這裏是一個簡要的概述Observer design pattern