首页 > 技术文章 > Structural Patterns Part 7/7: Proxy Pattern

1202zhyl 2016-06-06 18:58 原文

Structural Patterns Part 7/7: Proxy Pattern

目录


Definition

Proxy Pattern提供了一种控制Real Object的创建和访问的方式,它通常代替了Real Object的功能。

一句话:
One class controls the creation of and access to objects in another class.

何时使用?一般当希望隐藏目标对象的创建和访问时(比如缓存),或者希望在访问目标对象时提供额外的逻辑(动态代理)。

使用频率:Frequency of use Medium High


UML Class Diagram

Proxy Pattern


Implementation

考虑一个对图片的访问,因为从磁盘读取非常耗时间,所以可以使用代理,把图片缓存起来。

// Image.java
package designpatterns.structuralpatterns.proxy;

public interface Image {
    void display();
}

// ImageImpl.java
package designpatterns.structuralpatterns.proxy;

class RealImage implements Image {
    private String filename;

    public RealImage(String filename) {
        this.filename = filename;
        loadFromDisk(filename);
    }

    @Override
    public void display() {
        System.out.println("Display Image: " + filename);
    }

    private void loadFromDisk(String filename) {
        System.out.println("Load from Disk: " + filename);
    }
}

class ProxyImage implements Image {
    private RealImage ri;
    private String filename;

    public ProxyImage(String filename) {
        this.filename = filename;       
    }

    @Override
    public void display() {
        if(null == ri) {
            ri = new RealImage(filename);
        }

        ri.display();
    }
}

// ProxyDemo.java
package designpatterns.structuralpatterns.proxy;

public class ProxyDemo {
    public static void main(String[] args) {
        Image image = new ProxyImage("ProxyPattern.jpg");

        //image will be loaded from disk
        image.display();
        System.out.println();

        //image will not be loaded from disk
        image.display();
    }
}

// output, image loaded only once
Load from Disk: ProxyPattern.jpg
Display Image: ProxyPattern.jpg

Display Image: ProxyPattern.jpg

推荐阅读