Structural Patterns Part 7/7: Proxy Pattern

来源:互联网 发布:立讯精密 知乎 编辑:程序博客网 时间:2024/06/06 03:47

Structural Patterns Part 7/7: Proxy Pattern

目录

    • Structural Patterns Part 77 Proxy Pattern
    • 目录
    • Definition
    • UML Class Diagram
    • Implementation


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.javapackage designpatterns.structuralpatterns.proxy;public interface Image {    void display();}// ImageImpl.javapackage 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.javapackage 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 onceLoad from Disk: ProxyPattern.jpgDisplay Image: ProxyPattern.jpgDisplay Image: ProxyPattern.jpg
0 0
原创粉丝点击