C#设计模式实现-中介者模式(Media Partten)

含义:中介者模式是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

优点: 1.降低了类的复杂度,将一对多转化成了一对一。

            2.各个类之间的解耦

缺点:中介者会庞大,变得复杂难以维护。

主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。

使用场景: 1.系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。

                   2.想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

C#示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Mediaparten
{
    public class ChatRoom
    {

        public delegate void CallDispMessage(User user, string s);
        public CallDispMessage call;
        public void showMessage(User user, String message)
        {
            call(user, message);
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Mediaparten
{
    public class User
    {
        private String name;
        public ChatRoom chatroom;
       
        public String getName()
        {
            return name;
        }

        public void setName(String name)
        {
            this.name = name;
        }

        public User(String name)
        {
            this.name = name;
            chatroom = new ChatRoom();
            
        }

        public void sendMessage(User user, String message)
        {
            chatroom.showMessage(user, message);
        }
    }
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Mediaparten
{
    public partial class Form1 : Form
    {
        public User user;
        public Form1()
        {           
            InitializeComponent();
           
        }
        public void showmessage(User user,string s)
        {
            try
            {
                string str1 = user.getName();
                string str2 = DateTime.Now.ToString();
                string str3 = s;
                listBox1.Items.Add(str1);
                listBox1.Items.Add(str2);
                listBox1.Items.Add(str3);
            }
            catch (Exception ex)
            {

            }
        }

       
        private void btn_John_Click(object sender, EventArgs e)
        {

            User John = new User("John");
            John.chatroom.call += new ChatRoom.CallDispMessage(showmessage);
            John.sendMessage(John,txtJohn.Text.ToString());
         
        }

        private void btn_Tom_Click(object sender, EventArgs e)
        {

            User Tom = new User("Tom");
            Tom.chatroom.call += new ChatRoom.CallDispMessage(showmessage);
            Tom.sendMessage(Tom, txtTom.Text.ToString());
        }

       
    }
    
   
       
}

 

你可能感兴趣的:(C#设计模式实现-中介者模式(Media Partten))