设计模式之中介者设计模式n

来源:互联网 发布:武工队后勤部淘宝 编辑:程序博客网 时间:2024/05/21 14:41

中介者设计模式的说明,不进行详细介绍,重点放在代码段

中介设计模式

定义一个中介对象来封装系列对象之间的交互。中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互。


使用场合:
1.一组定义良好的对象,现在要进行复杂的通信。
2.定制一个分布在多个类中的行为,而又不想生成太多的子类。

优点:
1.降低了系统对象之间的耦合性,使得对象易于独立的被复用。
2.提高系统的灵活性,使得系统易于扩展和维护。

缺点:
中介者模式的缺点是显而易见的,因为这个“中介“承担了较多的责任,所以一旦这个中介对象出现了问题,那么整个系统就会受到重大的影响


多播委托也可以实现、且更简单、但不安全,委托本事是不安全的。


事件是类型安全的委托、所以使用事件最为合理,这就是观察者设计模式。


案例说明:

环境:

信息创建者:当信息创建者信息发生变化时,所有的接受者需要同步的获取到信息。

信息接受者:接受信息创建者的信息。

接口:由接受者实现接口,用于信息创建者进行调用,ISenderMessage。

Main窗体:创建信息创建者和信息接受者,MainForm


        
        //MainForm        //创建信息创建者窗体        private void btnReceiver_Click(object sender, EventArgs e)        {            GetMessageForm1 g1 = new GetMessageForm1();            g1.Show();            GetMessageForm2 g2 = new GetMessageForm2();            g2.Show();        }        //创建信息接受者窗体        private void btnSender_Click(object sender, EventArgs e)        {            SenderForm senderForm = new SenderForm();            senderForm.Show();        }

        
        //接口,信息接受者进行实现    public interface ISenderMessage    {        void GetMessage(string messageStr);    }
public SenderForm()        {            InitializeComponent();            //初始化            MessageCollection = new List<ISenderMessage>();        }
        //SenderForm        public SenderForm()        {            InitializeComponent();            //初始化            MessageCollection = new List<ISenderMessage>();        }        //静态属性,方便全局使用        public static List<ISenderMessage> MessageCollection { get; set; }        //TextBox事件        private void tbSendMessage_TextChanged(object sender, EventArgs e)        {            MessageSend(tbSendMessage.Text.Trim());        }        //调用接受者实现接口        public void MessageSend(string str)        {            for (int i = 0; i < MessageCollection.Count; i++)            {                MessageCollection[i].GetMessage(str);            }        }
public partial class GetMessageForm :ISenderMessage    {            public GetMessageForm()            {            InitializeComponent();            SenderForm.MessageCollection.Add(this);
            }            public override void GetMessage(string messageStr)            {                this.textBox1.Text = messageStr;            }   }


                                             
1 0
原创粉丝点击