无涯教程-Java 代理模式

56 阅读1分钟

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,通俗的来讲代理模式就是无涯教程生活中常见的中介,属于结构模式。

代理模式实例

将创建一个 Image 接口和实现 Image 接口的具体类。 ProxyImage 是一个代理类,可减少 RealImage 对象加载的内存占用。

演示类 ProxyPatternDemo 将使用 ProxyImage 获取 Image 对象,以根据需要加载和显示该对象。

Proxy Pattern UML Diagram

第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.jpg

Displaying test_10mb.jpg

参考链接

www.learnfk.com/design-patt…