一、概述
代理模式是一种结构型设计模式,它提供了一个代理对象,充当被代理对象的接口,以控制对被代理对象的访问。代理模式可以在不修改被代理对象的情况下,增加额外的功能或控制访问方式。
二、代码
以下是一个示例代码,说明代理模式的使用:
//1.接口定义
public interface Image {
void display();
}
//2.具体实现类
public class RealImage implements Image {
private String filename;
public RealImage(String filename) {
this.filename = filename;
loadFromDisk();
}
private void loadFromDisk() {
System.out.println("加载图片: " + filename);
}
@Override
public void display() {
System.out.println("显示图片: " + filename);
}
}
//3.代理类
public class ProxyImage implements Image {
private String filename;
private RealImage realImage;
public ProxyImage(String filename) {
this.filename = filename;
}
@Override
public void display() {
if (realImage == null) {
realImage = new RealImage(filename);
}
realImage.display();
}
}
//4.测试类
public class Test {
public static void main(String[] args) {
Image image1 = new ProxyImage("image1.jpg");
image1.display(); // 加载和显示图像
Image image2 = new ProxyImage("image2.jpg");
image2.display(); // 只加载和显示图像
image1.display(); // 无需重新加载,直接显示图像
}
}
在上述代码中,我们有一个接口 Image
,定义了图像的显示方法 display()
。然后我们有一个具体实现类 RealImage
,它表示真正的图像对象,并负责从磁盘加载图像并显示。
在代理模式中,我们有一个代理类 ProxyImage
,它实现了 Image
接口。代理类持有一个对真实图像对象的引用,并在需要时创建并使用真实图像对象。代理类的 display()
方法首先检查真实图像对象是否已经创建,如果尚未创建,则创建一个真实图像对象并调用其 display()
方法进行图像的加载和显示。
在测试代码中,我们创建了代理对象 ProxyImage
,然后调用其 display()
方法来显示图像。当我们第一次调用 display()
方法时,代理对象会创建真实图像对象并加载图像,然后显示图像。当我们再次调用 display()
方法时,代理对象直接使用已创建的真实图像对象进行显示,无需重新加载图像。
通过使用代理模式,我们可以控制对被代理对象的访问,并在必要时进行额外的操作。代理模式提供了一种间接访问对象的方式,对客户端隐藏了对象的具体实现细节,实现了对象的保护和控制。
代理模式通过引入代理对象来控制对被代理对象的访问,提供了一种间接访问的方式。代理对象充当了被代理对象的接口,使得客户端可以通过代理对象来访问被代理对象,同时可以在代理对象中增加额外的功能或控制访问方式。
代理模式的优点包括:
- 职责分离:代理模式可以将客户端和被代理对象分离,客户端无需直接与被代理对象交互,减少了客户端与具体实现类的耦合。
- 增加功能:代理对象可以在不修改被代理对象的情况下,通过在其方法中添加额外的逻辑,实现对被代理对象的功能扩展。
- 控制访问:代理模式可以限制对被代理对象的访问,例如在访问敏感信息时进行权限验证。
- 延迟加载:代理对象可以延迟创建和初始化被代理对象,提高系统的性能和资源利用率。
然而,代理模式也存在一些缺点,包括:文章来源:https://www.toymoban.com/news/detail-440121.html
- 增加复杂性:引入代理对象增加了系统的复杂性,需要维护额外的对象关系。
- 增加开销:代理模式可能引入了额外的开销,例如代理对象的创建和调用的间接性。
- 部分功能受限:某些类型的代理模式可能会限制被代理对象的部分功能,因为代理对象只实现了被代理对象接口的部分方法。
总结而言,代理模式提供了一种间接访问对象的方式,通过代理对象控制对被代理对象的访问,可以增加功能、控制访问、延迟加载等。它是一种常见的结构型设计模式,广泛应用于需要增加额外功能或控制访问的场景。文章来源地址https://www.toymoban.com/news/detail-440121.html
到了这里,关于Java设计模式(十三)代理模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!