代理模式(proxy),为其他对象提供一种代理以控制对这个对象的访问。
Class Diagram
 
Implementation
代理接口
| 12
 3
 
 | public interface Image {void showImage();
 }
 
 | 
被代理类
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
 | public class HighResolutionImage implements Image {private URL imageURL;
 private long startTime;
 private int height;
 private int width;
 
 public int getHeight() {
 return height;
 }
 
 public int getWidth() {
 return width;
 }
 
 public HighResolutionImage(URL imageURL) {
 this.imageURL = imageURL;
 this.startTime = System.currentTimeMillis();
 this.width = 600;
 this.height = 600;
 }
 
 public boolean isLoad() {
 
 long endTime = System.currentTimeMillis();
 return endTime - startTime > 3000;
 }
 
 @Override
 public void showImage() {
 System.out.println("Real Image: " + imageURL);
 }
 }
 
 | 
代理类
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | public class ImageProxy implements Image {
 private HighResolutionImage highResolutionImage;
 
 public ImageProxy(HighResolutionImage highResolutionImage) {
 this.highResolutionImage = highResolutionImage;
 }
 
 @Override
 public void showImage() {
 while (!highResolutionImage.isLoad()) {
 try {
 System.out.println("Temp Image: " + highResolutionImage.getWidth() + " " + highResolutionImage.getHeight());
 Thread.sleep(100);
 } catch (InterruptedException e) {
 e.printStackTrace();
 }
 }
 highResolutionImage.showImage();
 }
 }
 
 | 
测试类
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | public class ProxyTest {
 @Test
 public void test() throws Exception{
 String image = "http://image.jpg";
 URL url = new URL(image);
 HighResolutionImage highResolutionImage = new HighResolutionImage(url);
 ImageProxy imageProxy = new ImageProxy(highResolutionImage);
 imageProxy.showImage();
 }
 }
 
 | 
Example
- java.lang.reflect.Proxy
- RMI
Reflence