代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,通俗的来讲代理模式就是无涯教程生活中常见的中介,属于结构模式。
将创建一个 Image 接口和实现 Image 接口的具体类。 ProxyImage 是一个代理类,可减少 RealImage 对象加载的内存占用。
演示类 ProxyPatternDemo 将使用 ProxyImage 获取 Image 对象,以根据需要加载和显示该对象。
第1步 - 创建一个Image接口。
Image.java
public interface Image { void display(); }
第2步 - 创建实现Image接口的具体类。
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() { 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(); } }
第4步 - 验证输出。
Loading test_10mb.jpg Displaying test_10mb.jpg Displaying test_10mb.jpg
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)