文章首发:
结构型模式:代理模式设计模式
七大结构型模式之七:代理模式。微信
姓名 :代理模式网络
英文名 :Proxy Pattern架构
价值观 :为生活加点料框架
我的介绍 :
Provide a surrogate or placeholder for another object to control access to it.
为其余对象提供一种代理以控制对这个对象的访问。
(来自《设计模式之禅》)dom
我们从事 IT 行业,随时均可能上网查东西,若是网络速度慢或者网络访问受限制,那是至关的折磨,忍无可忍。而咱在国内网络比较特殊,有个墙围着,俗称防火长城。今天讲到代理模式,就来说讲这道墙。这墙是这么实现的,咱们上网,正常的网络是世界各地的网站咱们都能访问,而加上这道墙,至关于在咱们上网的时候作了一层代理,这一层代理把禁用的网站给过滤掉,使得咱们无法访问被禁用的网站。下面经过代码来说解。机器学习
定义一个互联网接口,里面有一个访问网站的通用方法 access
。ide
/** * 互联网 */ interface Internet { String access(String domain); }
定义世界范围内的网络类,能够访问任何存在的网站。学习
/** * 世界网络 */ class WorldNetwork implements Internet { @Override public String access(String domain) { System.out.println("访问网站:" + domain); return domain + "网站内容"; } }
定义中国的网络类,就是代理类,实现墙的功能。disable
对象存储了在国内禁止访问的网站,用户在访问网站时(也就是调用 access 访问)先判断网站是否是在禁用的网站集合里面,若是是则禁用,若是不是则继续访问。测试
/** * 中国网络(就是代理) */ class ChinnessNetwork implements Internet { private Set<String> disable; private Internet internet; public ChinnessNetwork(Internet internet) { this.internet = internet; this.disable = new HashSet<>(); this.disable.add("www.google.com"); this.disable.add("www.facebook.com"); } @Override public String access(String domain) { if (disable.contains(domain)) { System.out.println("禁止访问该网站:" + domain); return "禁止访问该网站:" + domain; } return internet.access(domain); } }
测试代码,ChinnessNetwork 做为代理类,WorldNetwork 做为被代理类。
public class ProxyTest { public static void main(String[] args) { WorldNetwork worldNetwork = new WorldNetwork(); ChinnessNetwork chinnessNetwork = new ChinnessNetwork(worldNetwork); chinnessNetwork.access("www.google.com"); chinnessNetwork.access("www.baidu.com"); } } 打印结果: 禁止访问该网站:www.google.com 访问网站:www.baidu.com
看到结果,万能的 google 被屏蔽在外,咱们只能默默用 baidu。
代理模式简单说就是在原来对象的功能基础上加上额外的功能,在工做开发中这个很好用,好比咱们要统计系统中各方法执行的时间,就能够用代理模式来实现。开源框架中也用得不少,好比 Spring 的 AOP 等等。
上面简单的分享了代理模式,也是最简单的一个代理模式,名称叫静态代理
。在开发中用的最多的是动态代理
,基于这篇文章主要讲述设计模式的基础内容,后面找个机会再分享动态代理的内容。
好了,6 篇原则 + 23 篇设计模式已经完结了。全部的文章都整理在『设计模式』菜单里面,以下图所示,方便你们忘记了能够再瞄一眼。后面准备把这 29 篇文章整理成 PDF 分享给你们。
推荐阅读
公众号后台回复『大礼包』获取 Java、Python、IOS 等教程
加我的微信备注『教程』获取架构师、机器学习等教程