朱利IT博客首页 | 设计模式 | 数据库 | 框架开发| 程序优化 | 控件学习 | 心得体会 | 给我留言

代理模式-Proxy程序替你聊天

代理模式比喻
跟MM在网上聊天,她们一开头总是“hi,你好”,“你从哪儿来呀?”“你多大了?”“身高多少呀?”这些话,真烦人,写个程序做为我的Proxy吧,凡是接收到这些话都设置好了自动的回答,接收到其他的话时再通知我回答,怎么样,酷吧。

代理模式意图
代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。

代理模式类图

www.zhuli8.com-朱利IT博客

代理模式实现
    /// <summary>
    /// 定义RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy
    /// </summary>
    abstract class Subject
    {
        public abstract void Operation();
    }

    /// <summary>
    /// Proxy所代表的真实实体
    /// </summary>
    class RealSubject : Subject
    {
        Girl mm;
        public RealSubject(Girl mm)
        {
            this.mm = mm;
        }

        public override void Operation()
        {
            switch (mm.Word)
            {
                case "hi,你好":
                    Console.WriteLine("hi,你好");//设置自动回答
                    break;
                case "你从哪儿来呀?":
                    Console.WriteLine("火星");//设置自动回答
                    break;
                case "你多大了?":
                    Console.WriteLine("18");//设置自动回答
                    break;
                case "身高多少呀?":
                    Console.WriteLine("2.5m");//设置自动回答
                    break;
                default://接收到其他的话时再通知我回答
                    Say();
                    break;
            }
        }

        /// <summary>
        /// 我回答,具体实现略
        /// </summary>
        private void Say()
        {
            Console.WriteLine("我出场了……");
        }
    }

    /// <summary>
    /// 保存一个RealSubject引用使得代理可以访问实体并提供一个与Subject相同的接口来代替实体
    /// </summary>
    class Proxy : Subject
    {
        RealSubject rs;
        public Proxy(Girl mm)
        {
            rs = new RealSubject(mm);
        }
        public override void Operation()
        {
            rs.Operation();
        }
    }

    /// <summary>
    /// 聊天的MM
    /// </summary>
    class Girl
    {
        private string word;
        public string Word
        {
            get { return word; }
            set { word = value; }
        }
    }

    /// <summary>
    /// 代理模式客户端应用
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            //MM:“hi,你好”“你从哪儿来呀?”“你多大了?”“身高多少呀?”
            Girl mm = new Girl();
            mm.Word = "hi,你好";

            //代理替我聊天
            Proxy proxy = new Proxy(mm);
            proxy.Operation();

            Console.Read();
        }
    }

代理模式总结
吼吼,这是不是就是传说中的机器人聊天原理啊!代理模式给某一个对象提供一个代理对象,由代理对象控制对源对象的引用。代理就是一个人或一个结构代表另一个人或者一个机构采取行动。我们身边到处都是代理模式,如远程代理、虚拟代理、安全代理、智能指引等。

posted @ 2012-01-05 08:52  木子朱  阅读(1516)  评论(3编辑  收藏  举报

朱利IT博客首页 | 设计模式 | 数据库 | 框架开发| WPF| WCF| IBatisNet| 程序优化 | 控件学习 | 心得体会 | 给我留言