定义:
为其他对象提供一种代理以控制对这个对象的访问。
结构:(书中图,侵删)
一个定义公共方法的接口
一个真实实体
一个含有真实实体引用的代理类
实例:
我思考了一下,咱们的科学上网就是一种代理
如上图,假如要访问油管,我们需要先将请求发给代理服务器,由代理服务器帮我们访问目标网站。
但是一般这种目标网站是不知道真正访问的人——也就是我的存在的。
用代码来表示:
公共接口,都有访问的方法
package designpattern.proxy; public interface Visit { void visit(String address); }
真实类(自己的电脑):
package designpattern.proxy; public class PC implements Visit { @Override public void visit(String address) { System.out.println("访问" + address); } }
代理类(代理服务器):
package designpattern.proxy; public class Proxy implements Visit { PC pc; public Proxy(PC pc) { this.pc = pc; } @Override public void visit(String address) { pc.visit(address); } }
客户端:
package designpattern.proxy; public class Client { public static void main(String[] args) { Proxy proxy = new Proxy(new PC()); proxy.visit("youtube.com"); } }
结果输出:
访问youtube.com
总结:
这个设计模式相对来说比较简单,就相当于授权给别人,让别人帮我干事;
有点像古代尚方宝剑的感觉,见到此剑,如朕亲临。(一不小心中二了起来)
生活中也很常见,所以理解起来比较容易。