Structural Patterns Part 7/7: Proxy Pattern

本文详细介绍了代理模式的概念及其应用场景,通过一个具体的图片加载示例展示了如何使用代理模式来优化资源加载过程,减少不必要的磁盘访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值