【设计模式】——代理模式

【代理模式】

代理模式为其他队提供一种代理以控制对这个对象的访问

 

【介绍】

  • 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因,直接访问会给使用者或者系统结构带来很多的麻烦,我们可以在访问此对象时加上一个对此对象的访问层

  • 何时使用:想在访问一个类时做一些控制

  • 如何解决:增加中间层

  • 关键代码:实现与被代理类组合

  • 优点:职责清晰、高扩展性、智能化

  • 缺点:1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢

                2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂

  • 使用场景:1、远程代理:为一个对象在不同的地址空间提供局部代表,这样就可以隐藏一个对象存在于不同地址空间的事实

                2、虚拟代理:根据需求创建开销很大的对象。通过它来存放实例化需求             很                  长时间的真实对象

                3、安全代理:用来控制真是对象访问时的权限

                4、智能引用代理:当调用真实的对象时,代理处理另外一些事

  • 注意事项:1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口

               2、和装饰模式的区别:装饰模式增强了功能,而代理模式是为了加以控制

 

【实现】

Subject类,定义了RealSubject和Proxy的公用接口,这样就可以在任意使用RealSubject的地方都可以使用Proxy

 

步骤一:创建一个接口

abstract class Subject

    {

        public abstract void Request();

    }

 

 

步骤二:RealSubject类,定义Proxy所代表的真实实体


 

   class RealSubject:Subject

    {

        public override void Request()

        {

            Console.WriteLine("真实的请求");

        }

    }

 

步骤三:Proxy类,保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口

 

   

 class Proxy:Subject

    {



        RealSubject realsubject;

        public override void Request()

        {

            if (realsubject==null)

            {

                realsubject = new RealSubject();

            }

            realsubject.Request();



        }

    }

步骤四:客户端代码


 

static void Main(string[] args)

        {

            Proxy proxy = new Proxy();

            proxy.Request();

            Console.Read();

           

        }

【总结】

 

代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途

代理就是真实对象的代表

猜你喜欢

转载自blog.csdn.net/damishidai15/article/details/83902273