代理模式(Proxy Pattern)

简介: 代理模式(Proxy Pattern)

为其他对象提供一种代理以控制对这个对象的访问


实现


我们将创建一个 Image 接口和实现了 Image 接口的实体类。ProxyImage 是一个代理类,减少 RealImage 对象加载的内存占用。

ProxyPatternDemo 类使用 ProxyImage 来获取要加载的 Image 对象,并按照需求进行显示。

步骤 1

创建一个接口。


package com.itheima.dao;
public interface Image {
    void display();
}

步骤 2

创建实现接口的实体类

package com.itheima.domain;
import com.itheima.dao.Image;
public class RealImage implements Image {
    private String fileName;
    public RealImage(String fileName){
        this.fileName = fileName;
        loadFromDisk(fileName);
    }
    public void display() {
        System.out.println("Displaying " + fileName);
    }
    private void loadFromDisk(String fileName){
        System.out.println("Loading " + fileName);
    }
}

代理类

package com.itheima.domain;
import com.itheima.dao.Image;
public class ProxyImage implements Image {
    private RealImage realImage;
    private String fileName;
    public ProxyImage(String fileName){
        this.fileName = fileName;
    }
    public void display() {
        if(realImage == null){
            realImage = new RealImage(fileName);
        }
        realImage.display();
    }
}

步骤 3

当被请求时,使用 ProxyImage 来获取 RealImage 类的对象

package com.itheima.domain;
import com.itheima.dao.Image;
public class ProxyPatternDemo {
    public static void main(String[] args) {
        Image image = new ProxyImage("test_10mb.jpg");
        // 图像将从磁盘加载
        image.display();
        System.out.println("");
        // 图像不需要从磁盘加载
        image.display();
    }
}

步骤 4

执行程序,输出结果:

G:\Java\jdk-9.0.4\bin\java "-javaagent:G:\IDEA2017\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar=56066:G:\IDEA2017\IntelliJ IDEA 2017.3.4\bin" -Dfile.encoding=UTF-8 -classpath G:\java所有代码\day01_01mybatis\target\classes;C:\Users\My\.m2\repository\org\mybatis\mybatis\3.4.5\mybatis-3.4.5.jar;C:\Users\My\.m2\repository\mysql\mysql-connector-java\5.1.6\mysql-connector-java-5.1.6.jar;C:\Users\My\.m2\repository\log4j\log4j\1.2.12\log4j-1.2.12.jar;C:\Users\My\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\My\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;G:\MAVEN\maven_repository com.itheima.domain.ProxyPatternDemo
Loading test_10mb.jpg
Displaying test_10mb.jpg
Displaying test_10mb.jpg
Process finished with exit code 0
相关文章
|
设计模式 Java
设计模式2 - 代理模式【Proxy Pattern】
设计模式2 - 代理模式【Proxy Pattern】
51 0
|
9天前
|
设计模式 监控 数据库
代理模式(Proxy Pattern)
代理模式(Proxy Pattern)是一种设计模式,通过一个中间对象(代理)来间接访问目标对象,以控制访问权限或添加额外功能。常见的代理类型包括远程代理、虚拟代理、保护代理和智能引用代理。代理模式常用于延迟加载、权限控制、日志记录等场景,能够提高系统的灵活性和安全性。
32 3
|
Arthas Java 测试技术
结构型模式 - 代理模式(Proxy Pattern)
结构型模式 - 代理模式(Proxy Pattern)
|
设计模式 安全 Java
【Java设计模式】代理模式(Proxy Pattern)
为其他对象提供一种代理,以控制对这个对象的访问,代理对象在客户端和目标对象之间起到中介作用。
159 0
【Java设计模式】代理模式(Proxy Pattern)
你管这叫代理模式(Proxy Pattern)
代理模式即给一个真实类提供一个代理类,该代理类代替真实类完成其功能,一般还可在代理类上添加一些真实类不具有的附加功能,通俗来讲代理模式就是我们生活中常见的中介,代理模式又可分为静态代理和动态代理。
|
设计模式 缓存 监控
结构型-Proxy
代理模式(Proxy Design Pattern)的原理和代码实现都不难掌握。它在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。 1. 代理模式的原理与实现 在不改变原始类(或叫被代理类)的情况下,通过引入代理类来给原始类附加功能。一般情况下,我们让代理类和原始类实现同样的接口。但是,如果原始类并没有定义接口,并且原始类代码并不是我们开发维护的。在这种情况下,我们可以通过让代理类继承原始类的方法来实现代理模式。
151 0
|
监控 数据库
代理模式(Proxy)
转载 https://blog.csdn.net/lovelion/article/details/8228042 某软件公司承接了某信息咨询公司的收费商务信息查询系统的开发任务,该系统的基本需求如下: (1) 在进行商务信息查询之前用户需要通过身份验证,只有合法用户才能够使用该查询系统; (2) 在进行商务信息查询时系统需要记录查询日志,以便根据查询次数收取查询费用。
1037 0