《C#设计模式》==>中介者模式 又称调停者模式

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("文本框显示:小龙女");
        }
    }




}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值