代理模式-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();
        }
    }

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

朱利IT博客原创博文:文章地址:http://www.zhuli8.com/sjms/proxy.html 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值