中介者模式

中介者模式:

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以控制各个对象的交互。

优点集中控制,缺点也是他,可能导致集中控制的那个中介类代码量编程巨无霸;

using System;
using System.Collections.Generic;
using System.Text;

namespace 设计模式
{
    abstract class Mediator
    {
        public abstract void Send(string message, string receiver_name, Colleague colleagueWhoSend);
    }
    abstract class Colleague
    {
        private readonly string name;
        public string Getname() { return name; }
        protected Mediator mediator;
        public Colleague(Mediator mediator,string name)
        {
            this.mediator = mediator;
            this.name = name;
        }
        public abstract void Send(string message, string receiver_name);
        public abstract void Receive(string message, Colleague colleagueWhoSend);
    }
    //具体实现同事类
    class ConcreteColleague : Colleague
    {
        public void OwnFunction() { }
        public ConcreteColleague(Mediator mediator,string name) : base(mediator,name) { }
        public override void Send(string message,string receiver_name)
        {
            mediator.Send(message, receiver_name, this);
        }
        public override void Receive(string message,Colleague colleagueWhoSend)
        {
            Console.WriteLine("{0}收到来自{1}的信息{2}", this.Getname(), colleagueWhoSend.Getname(), message);
        }
    }
    //具体实现中介者类
    class ConcreteMediator : Mediator
    {
        private IList<Colleague> colleagues = new List<Colleague>();
        public void AddColle(Colleague colleague)
        {
            colleagues.Add(colleague);
        }
        public override void Send(string message, string receiver_name, Colleague colleagueWhoSend)
        {
            bool boo = false;
            foreach (Colleague colle in colleagues)
            {
                if (colle.Getname()== receiver_name)
                {
                    colle.Receive(message, colleagueWhoSend);
                    boo = true;
                }
            }
            if (boo == false)
            {
                Console.WriteLine("no such one");
            }
        }
    }
    class Costume
    {
        //客户端程序
        static void Main(string[] args)
        {
            ConcreteMediator Mediator0 = new ConcreteMediator();
            ConcreteColleague colleague1 = new ConcreteColleague(Mediator0, "小陈");
            ConcreteColleague colleague2 = new ConcreteColleague(Mediator0, "小李");
            ConcreteColleague colleague3 = new ConcreteColleague(Mediator0, "小林");
            //中介者需要认识所有对象
            Mediator0.AddColle(colleague1);
            Mediator0.AddColle(colleague2);
            Mediator0.AddColle(colleague3);
            //对象之间对话,只需要认识通话对象的名字(name)和中介者。
            colleague1.Send("你好啊,小林", "小林");
            colleague2.Send("你好呀,小林", "小林");
            colleague3.Send("你好啊,小陈", "小陈");
            colleague3.Send("你好啊,小李", "小李");
            colleague1.Send("你好啊,小王", "小王");

        }
    }
}

结果

小林收到来自小陈的信息你好啊,小林
小林收到来自小李的信息你好呀,小林
小陈收到来自小林的信息你好啊,小陈
小李收到来自小林的信息你好啊,小李
no such one
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值