zoukankan      html  css  js  c++  java
  • 设计模式代理模式

    /// <summary>
        
    /// 天气预报接口:代理接口
        
    /// </summary>
        public interface IWeather
        {
            /// <summary>
            
    /// 获取天气信息
            
    /// </summary>
            
    /// <returns></returns>
            string GetWeatherInfo();
        }

        /// <summary>
        
    /// 中央天气预报,实际业务类,实现具体的功能
        
    /// 该类部署在中央气象台的服务器上,我们要直接调用该类的
        
    /// 话需要经过很多步骤:1,建立连接 2,处理通讯协议 3,异常处理 等等
        
    /// </summary>
        public class CnWeather : IWeather
        {
            public string GetWeatherInfo()
            {
                return string.Format("{0},天气:晴 风力3-4级",DateTime.Now.ToShortDateString());
            }
        }

        /// <summary>
        
    /// 代理类,用它来封装和真实代理的交互过程,
        
    /// 客户端调用这个代理类就可以了,不用关心和远程
        
    /// 对象的复杂交互问题,由这个代理类来搞定就可以了。
        
    /// </summary>
        public class LocalCnWeather : IWeather
        {
            private IWeather mWeather = new CnWeather();

            private void ConnectToRemoteServer()
            {
                Console.WriteLine("与远程服务建立连接以调用真实的远程对象");
            }

            private void HandleRemoteException(Exception ex)
            {
                Console.WriteLine("处理远程的异常。"+ex);
            }

            private void CloseRemoteConnection()
            {
                Console.WriteLine("远程连接关闭");
            }
            

            public string GetWeatherInfo()
            {
                ConnectToRemoteServer();
                string retMsg = string.Empty;
                try
                {
                    retMsg= mWeather.GetWeatherInfo();
                }
                catch (Exception ex)
                {
                    HandleRemoteException(ex);
                }
                finally
                {
                    CloseRemoteConnection();
                }

                return retMsg;
            }
        }



     public static void ProxyPattern()
            {
                IWeather w = new LocalCnWeather();

                Console.WriteLine(w.GetWeatherInfo());

                //一,代理模式主要目的:
                
    //1,简化对真实对象的调用,降低复杂度;
                
    //隔离客户端和真实对象的耦合,用代理对象来处理与真实对象的
                
    //交互过程。
                
    //2,限制对真实对象的访问,比如只想让客户端调用真实
                
    //对象的一部分功能。 
                
    //3,总之代理模式就是隔开调用者和真实对象,让二者不直接打交道。
                
    //二,代理模式实际应用:1,WebService,WCF  2,邮局
            }
  • 相关阅读:
    SpringMVC项目模块浅析
    利用python脚本(xpath)抓取数据
    利用python脚本(re)抓取美空mm图片
    Intellij idea开发Hadoop MapReduce程序
    在Hadoop平台跑python脚本
    Hadoop常用命令
    CentOS6.5 安装Zookeeper集群
    MySQL常用命令
    MongoDB常用命令
    前后端分离架构+k8s+ingress
  • 原文地址:https://www.cnblogs.com/imap/p/2618781.html
Copyright © 2011-2022 走看看