代理模式

来源:互联网 发布:samba源码下载 编辑:程序博客网 时间:2024/06/01 19:18

      代理模式的适用场景

代理模式就是给一个对象提供一个代理,并由代理对象控制对原对象的引用。

主要使用场景有:日志代理、权限代理、缓存代理、延迟代理

参与者:

Subject: 抽象角色。声明真实对象和代理对象的共同接口。
       Proxy: 代理角色。代理对象与真实对象实现相同的接口,所以它能够在任何时刻都能够代理真实对象。代理角色内部包含有对真实对象的引用,所以她可以操作真实对象,同时也可以附加其他的操作,相当于对真实对象进行封装。
         RealSubject: 真实角色。它代表着真实对象,是我们最终要引用的对象

Subject: 抽象角色

    public interface ISubject    {        bool Check_Ticket();        bool TadeTicket();    }
   RealSubject: 真实角色

    class RealSubject : ISubject    {        public bool Check_Ticket()        { return true; }        public bool TadeTicket()        { return false; }    }
Proxy: 代理角色
    class ProxySubject : ISubject    {//代理模式就是把真实类包了一层,现在的写法就是日志代理,原有的方法只有特定的功能,在代理方法里面写上每个步骤都做了什么操作.        private readonly RealSubject _realSubject = new RealSubject();        public bool Check_Ticket()        {            Console.WriteLine(@"先确认有没有票");            if (_realSubject.Check_Ticket())            {                Console.WriteLine(@"确认有票.");                return true;            }            else            {                Console.WriteLine(@"确认没有票.");                return false;            }        }        public bool TadeTicket()        {            Console.WriteLine(@"现在排队买票.");            if (_realSubject.TadeTicket())            {                Console.WriteLine(@"买到票了.");                return true;            }            else            {                Console.WriteLine(@"没有买到票.");                return false ;            }        }    }
结果: