一 基本概念:
在代理模式中,创建现有对象的对象,向外界提供功能接口,为其他对象提供一种代理以控制对这个类的访问
注意:与适配器模式的区别:适配器模式主要改变所考虑对象的接口,代理不能改变所代理类的接口;与装饰器模式的区别:装饰器是为了增加功能,代理是为了加以控制;
二 优点:
职责清晰
高扩展化
三 缺点:
由于在客户端和真实主题之间有了代理对象,会导致请求的处理速度变慢
实现代理模式会增加额外的工作
四 适用情景:
Spring aop
windows快捷方式
防火墙代理
代码样例:
//realImage和proxyImage都要实现的接口
public interface Image{
void display();
}
//reallmage
public class RealImage implements Image{
private String fileName;
public RealImage(String fileName){
this.fileName = fileName;
loadFromDisk(filaName);
}
public void display(){
System.out.println("Displaying"+fileName);
}
public void loadFeromDisk(){
System.out.println("Loading"+fileName);
}
}
//proxyImage
public class ProxyImage implements Image{
private RealImage realImage;
private String fileName;
public ProxyImage(){
this.fileName = fileName;
}
public void display(){
if(realImage==null){
realImage = new RealImage("fileName");
}
realImage.display();
}
}
//外部类调用代理对象
public class ProxyImageDemo{
public static void main(String args[]){
Image image = new ProxyImage("this is a proxy");
//第一次调用会从内存加载
image.display();
//第二次不需要加载
image.display();
/*输出情况*/
Loading this is a proxy
Displaying this is a proxy
Displaying this is a proxy
}
}