вопрос о шаблоне .net - PullRequest
2 голосов
/ 04 июня 2010

Я пытаюсь понять проблемы шаблона дизайна. Я пытаюсь изменить подобный код в 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();
}

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Вы пытались реализовать шаблон состояний, но есть некоторые ошибки. Одно из применений шаблонов состояний - удаление условных операторов if из вашего кода путем создания интерфейса состояний и реализации из него различных состояний. Но вы использовали switch оператор вместо ifs.A в функции tabControl1_SelectedIndexChanged вы снова используете ifs. Вы создали интерфейс iState и непосредственно его создали. Но я думаю, что вам нужно создать конкретную реализацию на интерфейсе iState, куда должны переходить коды состояний. Вы можете взглянуть на «O'REILLY Head first Design Patterns» глава-10 для руководства.

0 голосов
/ 04 июня 2010

Шаблон проектирования MVC.

...