代理模式是一种结构型设计模式,通过代理类封装真实对象的访问,可以在某些情况下提供额外功能。代理模式有远程代理、虚拟代理、保护代理和智能代理等类型。一个实战案例是文件读取代理,它在读取文件前后的额外功能中记录读取次数,从而实现解耦、灵活性、安全性的优点。
Java 设计模式之代理模式详解
简介
代理模式是一种结构型设计模式,它通过创建一个代理类来封装一个类的对象。代理类控制对真实对象的访问,在某些情况下可以提供额外的功能。
类型
代理模式有以下几种类型:
实战案例:文件读取代理
考虑一个场景,其中您想要记录读取文件的次数。您可以使用代理模式来创建一个代理类,该代理类在读取文件之前和之后执行此额外功能。
// 真实主题类,用于读取文件 public class RealFile { private String filename; public RealFile(String filename) { this.filename = filename; } public String readFile() { String content = readFromFile(filename); return content; } private String readFromFile(String filename) { // 实际读取文件并返回内容 return ""; } } // 文件读取代理类 public class FileProxy implements RealFile { private RealFile realFile; private int count = 0; public FileProxy(RealFile realFile) { this.realFile = realFile; } @Override public String readFile() { String content = realFile.readFile(); // 在读取文件之前执行额外功能 System.out.println("ReadFile called " + ++count + " times"); // 在读取文件之后执行额外功能 System.out.println("ReadFile returned " + content); return content; } }
在主函数中,您可以使用代理类来读取文件,同时记录读取次数:
RealFile realFile = new RealFile("file.txt"); FileProxy proxy = new FileProxy(realFile); String content = proxy.readFile();
优点