天天看点

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

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

其实其实项目实例神马的 根本就没必要了 看一下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()]

    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);

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

本文转自 熬夜的虫子  51CTO博客,原文链接:http://blog.51cto.com/dubing/712418

下一篇: RMAN介绍

继续阅读