我想了解设计模式问题。我试图在winforms中修改这样的代码,并试图查看是否有任何设计模式符合我的要求。请在此方案中建议哪种是最佳设计模式。这是非常基本的代码,包含2个标签页,可以动态添加不同的控件,并在单击特定选项卡时读出不同的文件。详细说明......我编写了这段代码来学习和理解设计模式。这只是用户点击特定选项卡的场景,该选项卡将显示生成的动态控件。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
if (tabControl1.SelectedTab.Name.Equals("tabPage1"))
{
GeneratedynamicControlsForTab1();
}
else if (tabControl1.SelectedTab.Name.Equals("tabPage2"))
{
GeneratedynamicControlsForTab2();
}
}
private void GeneratedynamicControlsForTab1()
{
Label label1 = new Label();
label1.Text = "Label1";
tabPage1.Controls.Add(label1);
}
private void GeneratedynamicControlsForTab2()
{
tabPage1.Controls.Clear();
Label label2 = new Label();
label2.Text = "Label2";
tabPage2.Controls.Add(label2);
}
}
如果以下情况适用于以上情况,请告知我们 如果此实现正确,请将上述代码修改为状态模式,请告诉我。
public partial class Form1 : Form
{
void GenerateControl(iState state)
{
switch (state.value)
{
case 1:
GenerateControlforTab1();
break;
case 2:
GenerateControlforTab2();
break;
}
}
void GenerateControlforTab1()
{
}
void GenerateControlforTab2()
{
}
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
IState state = new State()
if (tabControl1.SelectedTab.Name.Equals("tabPage1"))
{
state.value =1 ; }
else if (tabControl1.SelectedTab.Name.Equals("tabPage2"))
{
state.value =2;
}
this.GenerateControls();
}
}
interface iState {
void GenerateControls();
}
答案 0 :(得分:3)
你试图实现状态模式,但是有一些错误。状态模式的一个用途是通过创建状态接口并从中实现不同的状态来从代码中删除条件if语句。但是你使用了switch语句而不是ifs.And在tabControl1_SelectedIndexChanged函数中再次使用ifs。你已经创建了接口iState并直接实例化它。但我认为你应该在iState接口上创建一些具体的实现,状态代码应该去。你可以看看“O'REILLY Head first design Patterns”第10章是指导。
答案 1 :(得分:0)
MVC设计模式。