在代理模式中,类表示另一个类的功能.这种类型的设计模式属于结构模式.
在代理模式中,我们创建具有原始对象的对象,以将其功能与外部世界接口.
实现
我们将创建一个 Image 接口和实现 Image 接口的具体类. ProxyImage 是一个代理类,用于减少 RealImage 对象加载的内存占用.
ProxyPatternDemo ,我们的演示class,将使用 ProxyImage 来获取 Image 对象以根据需要加载和显示.
步骤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() { 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 will be loaded from disk image.display(); System.out.println(""); //image will not be loaded from disk image.display(); }}
步骤4
验证输出.
Loading test_10mb.jpgDisplaying test_10mb.jpgDisplaying test_10mb.jpg