一个类代表另一个类的功能
这里只讲代理模式,关于动态代理和静态代理请参考我另一个博客java中的代理
菜鸟案例:
我们将创建一个 Image 接口和实现了 Image 接口的实体类。ProxyImage 是一个代理类,减少 RealImage 对象加载的内存占用。
ProxyPatternDemo,我们的演示类使用 ProxyImage 来获取要加载的 Image 对象,并按照需求进行显示。
经过从前面设计模式一路学过来的脑回路
首先 左边肯定是一个接口两个实现类,这个没问题
然后 右边的实现类有左边实现类的属性,这样ProxyImage就有了RealImage的所有属性了方法了
这就代理上了,当然这是最简单的,主要是讲的代理模式,动态代理和静态代理就比这麻烦一些些
上代码
(1)创建一个接口。
Image.java
public interface Image {
void display();
}
(2)创建实现接口的实体类。
RealImage.java
public class RealImage implements Image {
private String fileName;
public RealImage(String fileName){
this.fileName = fileName;
//输入的文件名字,当成上传文件
loadFromDisk(fileName);
}
@Override
public void display() {
System.out.println("Displaying " + fileName);
}
private void loadFromDisk(String fileName){
System.out.println("Loading " + fileName);
}
}
ProxyImage.java
public class ProxyImage implements Image{
//直接挂着了
private RealImage realImage;
private String fileName;
public ProxyImage(String fileName){
this.fileName = fileName;
}
@Override
public void display() {
//当调用这个方法时如果没有RealImage 对象,就会new一个,这样此对象的display就是RealImage 的display了
if(realImage == null){
realImage = new RealImage(fileName);
}
realImage.display();
}
}
(3)当被请求时,使用 ProxyImage 来获取 RealImage 类的对象。
ProxyPatternDemo.java
public class ProxyPatternDemo {
public static void main(String[] args) {
Image image = new ProxyImage("test_10mb.jpg");
// 图像将从磁盘加载
image.display();
System.out.println("");
// 图像不需要从磁盘加载
image.display();
}
}
执行程序,输出结果:
Loading test_10mb.jpg
Displaying test_10mb.jpg
Displaying test_10mb.jpg
————————————————
版权声明:本文为CSDN博主「胖墩的IT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43113679/article/details/99470090