概述
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通过引用代理对象来访问真实对象就是代理模式的设计动机。
生活中的代理很多,如有快递公司通知你去取快递,你可以委托你的朋友去,而你的朋友就是你的代理,此外还有网络上的代理服务器
模式结构
subject 抽象角色; 声明被代理对象和代理对象的共同接口
Proxy 代理角色:代理角色和真实角色实现相同的接口,代理角色内部包含有对真实对象的引用,所以她可以操作真实对象,同时也可以附加其他的操作,相当于对真实对象进行封装。
RealSubject: 真实角色。它代表着真实对象,是我们最终要引用的对象
interface Getkd{
void getkd();
}
class You implements Getkd{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void getkd() {
// TODO Auto-generated method stub
System.out.println(getName() + " getkd");
}
}
class Friend implements Getkd {
Getkd you;
public Friend(Getkd you) {
this.you = you;
}
@Override
public void getkd() {
System.out.println("取快递前吃饭");
you.getkd();
System.out.println("取玩快递买西瓜");
}
}
优点
1、 代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。
2、 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的
缺点
1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
2、 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
五、 模式适用场景
1、 远程代理:为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2、 虚拟代理:通过使用过一个小的对象代理一个大对象。这样就可以减少系统的开销。
3、 保护代理:用来控制对真实对象的访问权限。
六、 模式总结
1、代理模式是通过使用引用代理对象来访问真实对象,在这里代理对象充当用于连接客户端和真实对象的中介者。
2、代理模式主要用于远程代理、虚拟代理和保护代理。其中保护代理可以进行访问权限控制。