JAVA设计模式之六代理模式

本文深入讲解Java设计模式中的代理模式,包括其基本概念、UML类图解析、具体实现代码及应用场景,帮助读者理解如何使用代理模式控制对象访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                        JAVA设计模式之六代理模式

一代理模式:为其他对象【被代理者】提供一种代理【代理者】 以控制对这个对象【控制对被代理者】的访问。【代理者可以作任何东西的接口:网络连接、内存中的大物件、档案或其它昂贵或无法复制的资源。】

二UML类图:


Subject类:定义了RealSubject和Proxy的共用接口,这样就可以在任何使用RealSubject的地方都可以用Proxy。  【就是代理的接口里边包含具体被代理什么的方法    代理者Proxy 和真正的被代理者RealSubject都实现这个接口】

RealSubject类:定义Proxy所代表的真实实体。  【真正的被代理者对象】

Proxy类:保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体。【里边创建被代理者的实体,,控制被代理者调用   该被代理者重写代理接口的方法】

Subject

public abstract class Image {      抽象类有个展示图片的方法
      public abstract void displayImage();     //被代理执行的动作
}

RealSubject类具体被代理者

public class RealImage extends Image {  
    private String filename;  
    public RealImage(String filename) {    //具体被代理者的构造方法
        this.filename = filename;  
        loadImageFromDisk();         //创造后就调用被代理者独有的方法
    }     
    private void loadImageFromDisk() {     //被代理者独有的方法
              
        System.out.println("Loading   " + filename);  
    }  
@Override  
//被代理者重新写 代理接口   让代理者去办的动作方法等待代理者 控制被代理者调用 
public void displayImage() {               
System.out.println("Displaying " + filename);   
}  
} 

Proxy

public classProxyImage extends Image { 

    private String filename; 
    private Image image; 
    public ProxyImage(String filename) {     //代理者的构造方法
        this.filename = filename;   
    } 
    @Override 
    public void displayImage() {            //代理者重写    抽象代理类要去代理的方法,,创建具体被代理者  调用它的具体被执行的方法
        if(image == null) 
            image = newRealImage(filename); 
        image.displayImage(); 
    } 

}  

客户端代码:

public class ProxyClient {  
    public static void main(String[] args) {  
        //利用多态创建   被代理抽象类的具体  代理者    具体代理者 里边创建被代理者的实体  并控制这个对象调用具体被代理的方法
        Image mImage1 = new ProxyImage("Andy.Photo1");  
        Image mImage2 = new ProxyImage("Andy.Photo2");  
          
        mImage1.displayImage();  
        mImage2.displayImage();  
    }  
}  

使用场景:

第一:远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。

第二:虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。

第三:安全代理,用来控制真实对象访问时的权限。

第四:智能引用,是指当调用真实对象时,代理处理另外一些事。本文的例子就是采用了这一点。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值