代理模式:
为其他对象提供一种代理以控制对这个对象的访问。
代理模式的应用:
1.远程代理,也就是为一个对象在不同的地址空间提供局部代表,
这样可以隐藏一个对象存在于不同地址空间的事实。
比如说dubbo的服务提供者代理,在消费者去远程调用服务提供者的时候,
实际上是调用的提供者在本地的代理,由代理再去访问远程服务。
2.虚拟代理,性能优化的一种方式,比如说某个对象的创建需要花很长时间
,这样的对象在启动的时候如果就创建,会导致启动时候很慢
因此可以使用代理,先创建一个代理对象,等到真正要用到时候,由代理对象去负责
初始化该对象。
3.安全代理,用来控制真实对象访问时的权限 。
4.智能指引,是指在调用真实对象的时候,代理处理另外一些事情。
代理就是真实对象的代表,在访问对象时引入一定程度的间接性,因为这种
间接性,可以附带多种用途。
uml类图如下

定义一个subject接口,里面定义了realSubject和proxy的共用接口。
这样 在任何使用了真实对象realSubject的地方都可以使用proxy。
realSubject类,一个真实对象。
Proxy ,保存一个真实对象的引用,使得代理可以访问实体
并提供一个与Subject的接口相同的接口。 代理就可以用来替代实体。
public interface Subject {
void request();
}
public class Proxy implements Subject {
private Subject subject;
@Override
public void request() {
if (subject==null){
subject=new RealSubject();
}
System.out.println("先执行代理的逻辑");
subject.request();
}
}
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("真实请求");
}
}
使用
public class Application {
public static void main(String[] args) {
Proxy proxy=new Proxy();
proxy.request();
}
}

代理模式和装饰器模式,有一部分类似,都是对原来的对象进行了修饰
但是装饰器模式侧重于对对象功能拓展的灵活性,可以给一个对象装饰不同的功能,一个功能也可以不同的对象装饰。代理类侧重于封装性,将原来访问真实类改为访问代理类。

182

被折叠的 条评论
为什么被折叠?



