C#设计模式系列 5 ----Mediator 中介者模式 之 程序员的七夕缘分

 1.理论定义

       中介者模式  定义了一种一对多的操作,解脱了对象之间多对多的引用依赖,所有对象之间的通信,都封装在 中介者里面。

   2.应用举例

          需求描述: 七夕来啦,谁说程序员就一定 是单身苦逼呢,程序员也有自己的幸福。

                         也在追寻自己的缘分,我们都是有理想,有文化,有独立见解的群体,

                         我们为 信息社会所做的努力,能给我们七夕带来好运。告别单身,开始行动啦!

                         1.三个程序员 找到了 缘分"YuanFen"大师,希望找到自己另一半,

                         2.六个美女: 刘诗诗,蒋琴琴,白富美,朱莉,舒淇,语嫣 也找到 缘分"YuanFen" 大师,

                            希望心中的 白马王子能给自己一注目光。

                         3.缘分大师  接受了程序员 和 美女的请求。

                         4.开始缘分派对啦! 

   3.具体编码

          1.美女们(Grils)

     

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

namespace Com.Design.Gof.Mediator
{
    public  class Girls
    {
        /// <summary>
        /// 美女名字
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 找了一个叫“缘分” 的中介者 做媒婆
        /// </summary>
        public YuanFen YuanFen { get; set; }
       /// <summary>
        /// 向自己心目中的 白马王子发信
       /// </summary>
       /// <param name="name_message">名字和信息</param>
        public void SendMessage(Dictionary<string,string> name_message) {
            YuanFen.SendToBoys(name_message);
        }
        /// <summary>
        /// 收到某个白马王子回信
        /// </summary>
        public void RecieveMessage(string msg)
        {
            Console.WriteLine(msg);
        }
    }
}

2. 帅哥程序员

 

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

namespace Com.Design.Gof.Mediator
{
    /// <summary>
    /// 帅哥 1 
    /// </summary>
    public class Boys
    {
        /// <summary>
        /// 帅哥名字
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 找了一个叫“缘分” 的中介者 做媒婆
        /// </summary>
        public YuanFen YuanFen { get; set; }
        /// <summary>
        ///向自己心目中的 白雪公主发信
        /// </summary>
        /// <param name="name_message">名字和信息</param>
        public void SendMessage(Dictionary<string, string> name_message)
        {
            YuanFen.SendToGrils(name_message);
        }
        /// <summary>
        /// 收到某个白雪公主回信
        /// </summary>
        public void RecieveMessage(string msg)
        {
            Console.WriteLine(msg);
        }
    }
}

3.缘分

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

namespace Com.Design.Gof.Mediator
{
    public class YuanFen
    {
        public List<Girls> Girls { get; set; }
        public List<Boys> Boys { get; set; }
        /// <summary>
        /// 男孩向女孩发信
        /// </summary>
        /// <param name="name_message"></param>
        public void SendToGrils(Dictionary<string, string> name_message)
        {
            foreach (var k in name_message) {
                foreach (var girl in Girls) {
                    if (k.Key == girl.Name) {
                        girl.RecieveMessage(k.Value);
                    }
                }
            }
        }
        /// <summary>
        /// 女孩向男孩发信
        /// </summary>
        /// <param name="name_message"></param>
        public void SendToBoys(Dictionary<string, string> name_message)
        {
            foreach (var k in name_message)
            {
                foreach (var boy in Boys)
                {
                    if (k.Key == boy.Name)
                    {
                        boy.RecieveMessage(k.Value);
                    }
                }
            }
        } 
    }
}

4.主函数(派对,发情书)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.Design.Gof.Mediator;
namespace Com.Design.Gof.Test
{
    class Program
    {
   

        static void Main(string[] args)
        {
            //缘分 这个 媒婆来了
            YuanFen yuanFen = new YuanFen {  Boys=new List<Boys>(), Girls=new List<Girls>()};

            //男孩子们雀跃报名啊
            Boys boy1 = new Boys {  Name="程序员1", YuanFen=yuanFen};
            Boys boy2 = new Boys { Name = "程序员2", YuanFen = yuanFen };
            Boys boy3 = new Boys { Name = "程序员3", YuanFen = yuanFen };

            //缘分接受了男孩子的夙愿
            yuanFen.Boys.Add(boy1); yuanFen.Boys.Add(boy2); yuanFen.Boys.Add(boy3);

            //女孩子也很积极
            Girls girls1 = new Girls {  Name="刘诗诗",  YuanFen=yuanFen};
            Girls girls2 = new Girls { Name = "白富美", YuanFen = yuanFen };
            Girls girls3 = new Girls { Name = "蒋琴琴", YuanFen = yuanFen };
            Girls girls4 = new Girls { Name = "舒淇", YuanFen = yuanFen };
            Girls girls5 = new Girls { Name = "朱莉", YuanFen = yuanFen };
            Girls girls6 = new Girls { Name = "语嫣", YuanFen = yuanFen };

            //缘分接受了美女们的爱情 丘比特
            yuanFen.Girls.Add(girls1); yuanFen.Girls.Add(girls2); yuanFen.Girls.Add(girls3);
            yuanFen.Girls.Add(girls4); yuanFen.Girls.Add(girls5); yuanFen.Girls.Add(girls6);
            //开始派对啦

            //程序员1 对 刘诗诗,蒋琴琴 感兴趣
            Dictionary<string, string> name_message = new Dictionary<string, string>();
            name_message.Add("刘诗诗", boy1.Name + "  对刘诗诗说: 诗诗诗诗  我爱你,就像老鼠爱大米");
            name_message.Add("蒋琴琴", boy1.Name + "  对蒋琴琴说: 我希望每天睡前最后看到的人是你...... ");
            boy1.SendMessage(name_message);
            name_message.Clear();
            Console.WriteLine();
            //程序员2 对 刘诗诗,朱莉,舒淇 感兴趣
            name_message.Add("语嫣", boy2.Name + "  对语嫣说:  地球仍然转动,世界依旧善变,而我永远爱你");
            name_message.Add("朱莉", boy2.Name + "  对朱莉说:  每天都 ...很想妳... ");
            name_message.Add("舒淇", boy2.Name + "  对舒淇说:  曾经迷惘的心中,是你牵引我走出寂寞 ");
            boy2.SendMessage(name_message);
            name_message.Clear();
            Console.WriteLine();

            //语嫣 对三个程序员都感兴趣
            name_message.Add("程序员1", girls6.Name + "  对程序员1说:  想想和我一起看日升日落的喜悦吧!...嘻嘻");
            name_message.Add("程序员2", girls6.Name + "  对程序员2说:  我的世界只有你懂.... ");
            name_message.Add("程序员3", girls6.Name + "  对程序员3说:  因为知道不能没有你,所以会更珍惜 ");
            girls6.SendMessage(name_message);
            name_message.Clear();
            Console.WriteLine();

            //蒋琴琴 很钟情,很专一,只给程序员1 发信
            name_message.Add("程序员1", girls3.Name + "  对程序员1说:  爱你一生伴你一世,你的心跳只有我听得到");
            girls3.SendMessage(name_message);
            Console.ReadKey();
        }

    }
}

5.运行结果

6.总结

  七夕来了,找回自己的缘分。

  附件里面包括了程序源码。

  这里是附件下载(Download)

posted @ 2012-08-03 11:51  正定聚  阅读(1128)  评论(2编辑  收藏  举报