博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(九):代理模式
阅读量:5354 次
发布时间:2019-06-15

本文共 2157 字,大约阅读时间需要 7 分钟。

一、定义

代理模式就是中间层。可以帮助我们增加或者减少对目标类的访问。

二、实例

我在项目中会遇见这样的情况,类A中的方法是protected,但是此时另外一个分继承自A类的B类要使用A中的个别方法。

比如这样:

public class Collect    {        protected void GetJson(string url)        {            Console.WriteLine("获取Json.");        }            }    public class Context    {        public void GetHtmlFromUrl(string url)        {            //这里想用 Collect中的GetJson()方法        }    }

好吧,那就增加一层代理,让代理去搞定:

public class Collect    {        protected void GetJson(string url)        {            Console.WriteLine("获取Json.");        }    }    public class JsonProxy : Collect    {               public void GetJsonFromUrl(string url)        {            base.GetJson(url);        }    }    public class Context    {        private JsonProxy jp = new JsonProxy();        public void GetJson(string url)        {            jp.GetJsonFromUrl(url);        }    }

客户端:

Proxy.Context cx = new Proxy.Context();cx.GetJson("URL");Console.ReadKey();

正规一点的代理模式:这里我私自加了单例模式在里面

public interface JsonProxy    {       void GetJsonFromUrl(string url);    }       public class Collect:JsonProxy    {        protected void GetJson(string url)        {            Console.WriteLine("执行受保护方法GetJson(),获取Json.");        }        public void GetJsonFromUrl(string url)        {            this.GetJson(url);        }    }    public class Proxy : JsonProxy    {        private static Collect collect { get; set; }              public static Proxy Instance { get; set; }        private Proxy() { }        static Proxy()        {            Instance = new Proxy();            collect = new Collect();            Console.WriteLine("单例 : 代理.");        }              public void GetJsonFromUrl(string url)        {            collect.GetJsonFromUrl(url);        }    }

客户端:

//-----------------------代理模式---------------------System.Threading.Tasks.Parallel.For(0, 500, t => { Proxy.Proxy.Instance.GetJsonFromUrl("URL"); });Console.ReadKey();

 三、优缺点

优:

  1. 代理模式能够将调用用于真正被调用的对象隔离,在一定程度上降低了系统的耦合度;
  2. 代理对象在客户端和目标对象之间起到一个中介的作用,这样可以起到对目标对象的保护。代理对象可以在对目标对象发出请求之前进行一个额外的操作,例如权限检查等。

缺:

  1.  由于在客户端和真实主题之间增加了一个代理对象,所以会造成请求的处理速度变慢
  2. 实现代理类也需要额外的工作,从而增加了系统的实现复杂度。

转载于:https://www.cnblogs.com/sunchong/p/5124591.html

你可能感兴趣的文章
IPython: 超越普通Python(1)
查看>>
CSS3-Canvas画布(渐变)
查看>>
python 练完这些,你的函数编程就ok了
查看>>
codeforces 300E Empire Strikes Back 数论+二分查找
查看>>
文件夹分类操作
查看>>
对Slony-I中wait on的理解
查看>>
Codeforces 899B Months and Years
查看>>
hibernate4整合spring3事务问题
查看>>
Ink – 帮助你快速创建响应式邮件(Email)的框架
查看>>
CutJS – 用于 HTML5 游戏开发的 2D 渲染引擎
查看>>
OS.js – 开源的 Web OS 系统,赶快来体验
查看>>
java集合
查看>>
hadoop源码导入eclipse
查看>>
{新人笔记 勿看} spring mvc第一步
查看>>
TCP系列34—窗口管理&流控—8、缓存自动调整
查看>>
NYOJ 112 指数运算
查看>>
大话https演化过程(对称加密、非对称加密、公钥、私钥、数字签名、数字证书)...
查看>>
Spark Streaming 调优指南
查看>>
“食物相克”大多是忽悠
查看>>
虽丑尤萌 世界最丑狗狗大赛在美举行
查看>>