结合项目实例 回顾传统设计模式(十一)代理模式

所谓的代理,就是代表某个真实的对象。在这个设计模式中,代理可以假装自己是远程对象,但其实只是一个中间角色。客户对象所作的就像是在做远程方法调用,但其实只是调用本地资源中得“代理”对象上得方法,再由代理处理所有网络通信的底层细节。

其实其实项目实例神马的 根本就没必要了 看一下Web Service的调用方式大家也许就明白了,它会在客户端生成一个代理类 - - 已经很完美的诠释了代理模式这个概念

虫子放下水 直接拿以前监控项目中客户端采集的代理方法了 --_____--

服务器端

        [WebMethod]
         public  void Mem_handleforM( string value, int monitorid)
        {
             try
            {
                 string IpInfo = WebUtils.GetClientIP();

                View_Mem vm =  new View_Mem();
                vm.Ip = IpInfo;
                vm.MonitorTime = DateTime.Now;
                vm.Value = value;
                vm.monitorid = monitorid;
                 // ViewService vs = new ViewService();

                ViewService.Instance.AddMemValue(vm);
            }
             catch (Exception ex)
            {
                ExceptionHandler.Instance.HandleException(ex);
            }


        }

代理

 

///   <summary>
    
///  代理
    
///   </summary>
    [System.CodeDom.Compiler.GeneratedCodeAttribute( " System.ServiceModel "" 3.0.0.0 ")]
     public  interface ReceiveVSoapChannel : ProxyService.ReceiveVService.ReceiveVSoap, System.ServiceModel.IClientChannel {
    }

    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute( " System.ServiceModel "" 3.0.0.0 ")]
     public  partial  class ReceiveVSoapClient : System.ServiceModel.ClientBase<ProxyService.ReceiveVService.ReceiveVSoap>, ProxyService.ReceiveVService.ReceiveVSoap
    {

         public ReceiveVSoapClient()
        {
        }

        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
        ProxyService.ReceiveVService.Mem_handleforMResponse ProxyService.ReceiveVService.ReceiveVSoap.Mem_handleforM(ProxyService.ReceiveVService.Mem_handleforMRequest request)
        {
             return  base.Channel.Mem_handleforM(request);
        }

         public  void Mem_handleforM( string value,  int monitorid)
        {
            ProxyService.ReceiveVService.Mem_handleforMRequest inValue =  new ProxyService.ReceiveVService.Mem_handleforMRequest();
            inValue.Body =  new ProxyService.ReceiveVService.Mem_handleforMRequestBody();
            inValue.Body.value = value;
            inValue.Body.monitorid = monitorid;
            ProxyService.ReceiveVService.Mem_handleforMResponse retVal = ((ProxyService.ReceiveVService.ReceiveVSoap)( this)).Mem_handleforM(inValue);
        }
    }

客户端

  ProxyService.ReceiveVService.ReceiveVSoapClient rv =  new ReceiveVSoapClient();
                    rv.Mem_handleforM(value, mc.MemoryConfig_MID);

总结:代理模式为另一个对象提供代表,以便控制客户对对象的访问,管理访问的方式有很多种。远程代理管理客户和远程对象之间的交互。
 

你可能感兴趣的:(设计模式)