代理模式(Proxy)

  1. 定义
    给某一个对象提供一个代 理,并由代理对象控制对原对象的引用。
    代理者可以作任何东西的接口:网络连接、存储器中的大对象、文件或其它昂贵或无法复制的资源。

  2. 类图


    Proxy.jpg
  3. 例子

//interface
interface Image {
    public void displayImage();
}

//on System A 
class RealImage implements Image {
    private String filename;
    public RealImage(String filename) { 
        this.filename = filename;
        loadImageFromDisk();
    }

    private void loadImageFromDisk() {
        System.out.println("Loading   " + filename);
    }

    public void displayImage() { 
        System.out.println("Displaying " + filename); 
    }
}

//on System B 
class ProxyImage implements Image {
    private String filename;
    private Image image;
 
    public ProxyImage(String filename) { 
        this.filename = filename; 
    }
    public void displayImage() {
        if(image == null)
              image = new RealImage(filename);
        image.displayImage();
    }
}
 
class ProxyExample {
    public static void main(String[] args) {
        Image image1 = new ProxyImage("HiRes_10MB_Photo1");
        Image image2 = new ProxyImage("HiRes_10MB_Photo2");     
        
        image1.displayImage(); // loading necessary
        image2.displayImage(); // loading necessary
    }
}

补充

  • 我开始比较容易和中介者模式弄混,后来对比类图才发现,其实代理是实现同一个接口,就是做同一种(类型)事。
  • 代理其实是个水很深的设计模式,简单的话可以很简单,难的话也可以难的让人摸不着头脑,是个很考验设计功力的东西。

推荐阅读更多精彩内容