中介者模式

1.中间代理类

namespace IntermediaryPattern
{
    /// <summary>
    /// 中介者模式:中介者类唯一要干的事情就是给各个成员对象发出通知。
    /// 因此,中介者事先就应该知道有哪些成员
    ///
    /// 中介者模式和代理模式,观察者模式非常的像。但是其它两种模式在调用的时候,
    /// 并不需要事先设置那个类被代理
    /// </summary>
    public abstract class Intermediary
    {
        /// <summary>
        /// 要发送的消息和要接受消息的成员
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="member"></param>
        public abstract void SendMsg(string msg,Member member);
    }

    /// <summary>
    /// 成员对象需要知道是哪个中介者在通知它事情
    /// </summary>
    public abstract class Member
    {
        protected Intermediary intermediary;

        public Member(Intermediary intermediaryObj)
        {
            this.intermediary = intermediaryObj;
        }

        /// <summary>
        /// 各成员间要发送消息
        /// </summary>
        /// <param name="msg"></param>
        public abstract void Send(string msg);

        /// <summary>
        /// 这个方法其实是具体实施发消息的
        /// </summary>
        /// <param name="msg"></param>
        public abstract void SendOut(string msg);
    }

    /// <summary>
    /// 教务处类
    /// </summary>
    public class Academic : Intermediary
    {
        //事先要知道有哪些成员
        public Class1 class1;
        public Class2 class2;

        public override void  SendMsg(string msg, Member member)
        {
            if (member.GetType().Name == "Class1")
                class1.SendOut(msg);
            if (member.GetType().Name == "Class2")
                class2.SendOut(msg);
        }
    }

    /// <summary>
    /// 1班
    /// </summary>
    public class Class1 : Member
    {
        public Class1(Intermediary intermediaryObj)
            : base(intermediaryObj)
        { }

        public override void Send(string msg)
        {
            intermediary.SendMsg(msg,this);
        }

        public override void SendOut(string msg)
        {
            Console.WriteLine(msg);
        }
    }

    /// <summary>
    /// 1班
    /// </summary>
    public class Class2 : Member
    {
        public Class2(Intermediary intermediaryObj)
            : base(intermediaryObj)
        { }

        public override void Send(string msg)
        {
            intermediary.SendMsg(msg, this);
        }

        public override void SendOut(string msg)
        {
            Console.WriteLine(msg);
        }
    }

}
2.调用

       static void Main(string[] args)
        {
            //实例化中介者对象
            Academic academic = new Academic();
            //具体的发消息对象
            Class1 member1 = new Class1(academic);
            Class2 member2 = new Class2(academic);
            //中介者事先需要知道接受消息的对象
            academic.class1 = member1;
            academic.class2 = member2;
           
            member1.Send("早上好");
            member2.Send("晚上好");
            Console.ReadKey();
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值