代理模式
设计模式之代理模式
本篇博客为学习记录,主要来自《大话设计模式》中 第七章 为别人做嫁衣--代理模式。。
在此向大家推荐《大话设计模式》这本书,用故事的方式讲述设计模式,还是很值得一读的。
1、代理模式简介
代理模式(英语:Proxy Pattern)是程序设计中的一种设计模式。
所谓的代理者是指一个类别可以作为其它东西的接口。代理者可以作任何东西的接口:网上连接、存储器中的大对象、文件或其它昂贵或无法复制的资源。
定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
2、代理模式应用
(1)、远程代理。
也就是为了一个对象在不同的地址空间提供局部代表,这样就可以隐藏一个对象存在于不同地址空间的事实。
(2)、虚拟代理。
是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
(3)、安全指代。
用来控制真实对象访问时的权限。一般用于对象应该有不同的访问权限的时候。
(4)、智能指引。
是指当调用真实的对象是时,代理处理另外一些事。
3、代理模式简易代码
共用接口:
/*
创建人:czc
创建时间:2019/12/18
创建用途:代理模式-共用接口
*/
public interface Subject {
public void Request();
}
真实实体:
/*
创建人:czc
创建时间:2019/12/18
创建用途:代理模式--真实实体
*/
public class RealSubject implements Subject{
@Override
public void Request() {
System.out.println("真实的请求");
}
}
代理:
/*
创建人:czc
创建时间:2019/12/18
创建用途:代理模式--代理
RealSubject和Proxy实现了相同的公用接口,则可以通过Proxy实现对RealSubject的真实调用。
*/
public class Proxy implements Subject{
RealSubject realSubject;
@Override
public void Request() {
if(realSubject==null){
realSubject=new RealSubject();
}
realSubject.Request();
}
}
模拟访问请求:
public class Main {
public static void main(String[] args){
Proxy proxy=new Proxy();
proxy.Request();
}
}
UML类图:
4、总结
个人觉得代理模式还是较为易懂的。
引入了代理,从而将外部对于真实实体的请求转化成对于代理对象的请求,这即进一步隐藏了真实实体的内部细节,同时引入代理也能对外部的请求进行进一步的处理。
这里面需要注意的是需要代理和真实实体实现共用接口,保证在真实实体中有的方法在代理中也有对应的方法能访问到。
吾生也有涯,而知也无涯。