zoukankan      html  css  js  c++  java
  • 极速理解设计模式系列:3.代理模式(Proxy Pattern)

    三个角色:实体接口(Subject),真实实体(RealSubject),代理实体(Proxy)

           实体接口(Subject):目标对象的抽象接口

           真实实体(RealSubject):目标对象的具体实现.

           代理实体(Proxy):同样实现Subject接口,但是在方法内部是调用真实实体的相应方法实现功能点,而非代理类自己去处理事务。


             实现思路:真实实体和代理实体都继承并且实现同一个接口,在客户端调用代理实体以达到调用真实实体的目的。

     类图:       


            应用场景:在Silverlight中会用到WebService服务,WebService的原理是在客户端本地生成一个代理类,客户端调用WebService方法的时候,通过代理类去访问真实类的结果,这是代理模式中的远程代理模式。

            分析:真实WebService类是部署在服务器上面的,本地需要有一个类来代理服务器上得WebService类的各种功能方法,实际上本地代理类并没有具体的处理过程,它是让服务器端的相应的真实实体类的对应方法运行。

            下面我们在控制台程序去演示一下如何使用Proxy Pattern:

            一、实体接口(Subject)

        /// <summary>
    /// 统一接口
    /// </summary>
    interface IWebService
    {
    void FirstMethod();
    void SecendMethod();
    }

            二、真实实体(RealSubject)

        class WebServiceTrue:IWebService
    {
    public void FirstMethod()
    {
    Console.WriteLine(
    "第一个实体方法");
    }

    public void SecendMethod()
    {
    Console.WriteLine(
    "第二个实体方法。");
    }
    }

            三、代理实体(Proxy)

        class WebServiceProxy:IWebService
    {
    IWebService webSerTrue;
    /// <summary>
    /// 构造函数
    /// </summary>
    public WebServiceProxy()
    {
    webSerTrue
    = new WebServiceTrue();
    }
    /// <summary>
    /// 调用真实类的第一个方法
    /// </summary>
    public void FirstMethod()
    {
    webSerTrue.FirstMethod();
    }

    /// <summary>
    /// 调用真实类的第二个方法
    /// </summary>
    public void SecendMethod()
    {
    webSerTrue.SecendMethod();
    }
    }

            四、客户端

        class Program
    {
    static void Main(string[] args)
    {
    //直接使用代理类运行即可
    WebServiceProxy webProxy = new WebServiceProxy();
    webProxy.FirstMethod();
    webProxy.SecendMethod();
    Console.ReadLine();
    }
    }

            如需源码请点击 ProxyPattern.rar 下载。

  • 相关阅读:
    【练习】flushback基于时间的闪回查询
    【练习】审计
    【练习】新建虚拟机
    织梦安全防护教程首页被挟持、被串改、被挂马、被入侵之后如何解决?
    织梦手机站下一篇变上一篇而且还出错Request Error!
    织梦图集上传错误提示ERROR: Upload Error!
    织梦炒鸡简单3部曲修改文档标题长度限制
    织梦dede:arclist和dede:list输出每个文章的内容有多少页
    织梦后台管理模板无法正常显示模板文件列表解决方法
    织梦列表页多种属性排序[ajax]-支持select方式和降序升序切换
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2147444.html
Copyright © 2011-2022 走看看