如果项目组件之间的通信非常复杂,相互调用而产生的复杂。
调停者模式帮助对象以没有关联的方式来通信,使得复杂度最小化。
各个组件之间并不是直接交互,而是都与一个中心化组件如调停者交互,由调停者来关注发送信息至其他组件,这样逻辑将变的干净清晰。
调停者类首先做的事情就是持有复杂交互相关类的引用。所以这里我们开放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;
}
}
}