代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,通俗的来讲代理模式就是无涯教程生活中常见的中介,属于结构模式。
代理模式实例
将创建一个 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");
</span><span class="com">//图像将从磁盘加载</span><span class="pln">
image</span><span class="pun">.</span><span class="pln">display</span><span class="pun">();</span><span class="pln">
</span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
</span><span class="com">//图像不会从磁盘加载</span><span class="pln">
image</span><span class="pun">.</span><span class="pln">display</span><span class="pun">();</span><span class="pln">
}
}
第4步 - 验证输出。
Loading test_10mb.jpg Displaying test_10mb.jpgDisplaying test_10mb.jpg