如果项目组件之间的通信非常复杂,相互调用而产生的复杂。

调停者模式帮助对象以没有关联的方式来通信,使得复杂度最小化。

各个组件之间并不是直接交互,而是都与一个中心化组件如调停者交互,由调停者来关注发送信息至其他组件,这样逻辑将变的干净清晰。

调停者类首先做的事情就是持有复杂交互相关类的引用。所以这里我们开放3个名为‘Register’的重载方法;‘Register’持有文本框对象和按钮对象;场景的交互被集中在‘ClickAddButton’、’TextChange’、‘ClickClearButton’方法中,这些方法将根据不同场景启用和禁用相关UI.

using System.Windows.Forms;

namespace WindowsFormsApp
{
    public partial class Form1 : Form
    {
        private clsMediator objMediator = new clsMediator();
        public Form1()
        {
            InitializeComponent();

            objMediator.Register(textBox1);
            objMediator.Register(btnAdd);
            objMediator.Register(button2);
            objMediator.Register(listBox1);
        }

        private void textBox1_TextChanged(object sender, System.EventArgs e)
        {
            objMediator.TextChange();
        }

        private void btnAdd_Click(object sender, System.EventArgs e)
        {
            objMediator.ClickAddButton();
        }

        private void button2_Click(object sender, System.EventArgs e)
        {
            objMediator.ClickClearButton();
        }
    }

    public class clsMediator
    {
        private TextBox objTextBox;
        private ListBox objListBox;
        private Button btnClear;
        private Button btnAdd;

        public void Register(TextBox obj)
        {
            objTextBox = obj;
        }
        public void Register(ListBox obj)
        {
            objListBox = obj;
        }
        public void Register(Button obj)
        {
            if (obj.Name == "btnAdd") { btnAdd = obj; }
            else
            {
                btnClear = obj;
            }
        }
        public void TextChange()
        {
            if (objTextBox.Text.Length > 0)
            {
                btnClear.Enabled = true;
                btnAdd.Enabled = true;
            }
            else
            {
                btnClear.Enabled = false;
                btnAdd.Enabled = false;
            }
        }
        public void ClickAddButton()
        {
            objListBox.Items.Add(objTextBox.Text);
            btnClear.Enabled = false;
            btnAdd.Enabled = false;
            objTextBox.Text = string.Empty;
        }
        public void ClickClearButton()
        {
            objTextBox.Text = string.Empty;
            btnAdd.Enabled = false;
            btnClear.Enabled = false;
        }
    }
}

results matching ""

    No results matching ""