using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignPattern
{
//中介者模式 又称调停者模式
//定义一个对象来封装一系列对象的交互,中介者模式使各对象之间不需要显式的相互引用,从而使其耦合松散,而且可以让你独立的改变他们之间的交互
//通过引入中介者来简化对象之间的复杂交互。
//多对多的关系使用中介者模式
//多对一的模式使用委托事件?
internal class MediatorPattern
{
public void main() {
//定义中介者对象
ConcreteMediator mediator = new ConcreteMediator();
//定义同事对象
Button2 addBT = new Button2();
List1 list = new List1();
Combobox1 cb = new Combobox1();
TextBox1 userNameTB = new TextBox1();
addBT.SetMediator(mediator);
list.SetMediator(mediator);
cb.SetMediator(mediator);
userNameTB.SetMediator(mediator);
mediator.addbutton = addBT;
mediator.list1 = list;
mediator.cb = cb;
mediator.userNameTextBox = userNameTB;
addBT.Changed();
Console.WriteLine("----------");
list.Changed();
Console.Read();
//输出
//--单击增加按钮--
//列表框增加一项:张无忌
//组合框增加一项:张无忌
//客户信息增加成功后文本框清空
//---------------------------
//--从列表框选择客户--
//组合框选中项:小龙女
//文本框显示:小龙女
//
}
}
//抽象中介类
abstract class Mediator
{
public abstract void ComponentChanged(Component c);
}
//具体中介者 负责成员变更事件内容的处理, ===>对象引用时为了实现此功能
class ConcreteMediator : Mediator
{
//维持对各个对象的引用
public Button2 addbutton;
public List1 list1;
public TextBox1 userNameTextBox;
public Combobox1 cb;
//封装同事对象指向的交互
public override void ComponentChanged(Component c)
{
//单击按钮
if (c == addbutton)
{
Console.WriteLine("--单击增加按钮--");
list1.Update();
cb.Update();
userNameTextBox.Update();
}
else if (c == list1)//从列表框选择客户
{
Console.WriteLine("--从列表框选择客户--");
cb.Select();
userNameTextBox.SetText();
}
else if (c == cb)//从组合框选择客户
{
Console.WriteLine("--从组合框选择客户--");
cb.Select();
userNameTextBox.SetText();
}
}
}
//抽象组件类 成员;成分;组成
abstract class Component
{
protected Mediator mediator;
public void SetMediator(Mediator mediator)
{
this.mediator = mediator;
}
//转发调用
public void Changed()
{
mediator.ComponentChanged(this);
}
public abstract void Update();
}
//按钮类 充当具体同事类
class Button2 : Component
{
public override void Update()
{
//按钮不产生相应
}
}
class List1 : Component
{
public override void Update()
{
Console.WriteLine("列表框增加一项:张无忌");
}
public void Select()
{
Console.WriteLine("列表框选中项:小龙女");
}
}
class Combobox1 : Component
{
public override void Update()
{
Console.WriteLine("组合框增加一项:张无忌");
}
public void Select()
{
Console.WriteLine("组合框选中项:小龙女");
}
}
class TextBox1 : Component
{
public override void Update()
{
Console.WriteLine("客户信息增成功后文本框清空");
}
public void SetText()
{
Console.WriteLine("文本框显示:小龙女");
}
}
}
《C#设计模式》==>中介者模式 又称调停者模式
最新推荐文章于 2024-07-25 00:09:37 发布