需要有关 C# 设计模式的建议
Need suggestions with c# design patterns
我刚刚开始学习 C# 中的设计模式。
我有两个ComboBox,当第一个ComboBox 选中的项目发生变化时,我需要更改第二个ComboBox 的内容。我无法在此处应用设计模式,而不是使用 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;
// ...
}
}
}
有人可以帮我在这里应用设计模式吗?我真的很想学习如何在我的项目中实现设计模式。
任何帮助将不胜感激!
看看策略模式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
}
我没有为我的建议设计命名。但这是我目前能想到的最好的设计:)
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() );
}
不确定响应是否 late.Maybe 它对寻找类似解决方案的人有用。
我觉得观察者模式可能就是你正在寻找的 for.If 你有一个对象,其状态更改应该通知其他对象然后你使用观察者 pattern.Here 是一个简短的概述 Observer design pattern.
我刚刚开始学习 C# 中的设计模式。
我有两个ComboBox,当第一个ComboBox 选中的项目发生变化时,我需要更改第二个ComboBox 的内容。我无法在此处应用设计模式,而不是使用 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;
// ...
}
}
}
有人可以帮我在这里应用设计模式吗?我真的很想学习如何在我的项目中实现设计模式。
任何帮助将不胜感激!
看看策略模式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
}
我没有为我的建议设计命名。但这是我目前能想到的最好的设计:)
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() );
}
不确定响应是否 late.Maybe 它对寻找类似解决方案的人有用。 我觉得观察者模式可能就是你正在寻找的 for.If 你有一个对象,其状态更改应该通知其他对象然后你使用观察者 pattern.Here 是一个简短的概述 Observer design pattern.