代理设计模式(Proxy Pattern)
描述: 代理设计模式就是一个对象代表另外一个对象的功能, 也就是指客户端并不直接调用实际的对象,而是通过中间的代理对象来间接的调用实际对象, 这种设计设计模式属于结构模式。
核心思想: 为对象提供一种以代理对象控制这个对象的访问
使用场景: 想访问一个类时做一些额外的操作,比如添加日志等
代理设计模式的优点:
代理设计模式的缺点:
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
- 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
示例:
1 2 3
| public interface Image { void display(); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class RealImage implements Image { private String fileName; public RealImage(String fileName){ this.fileName = fileName; loadFromDisk(fileName); } @Override public void display() { System.out.println("Displaying " + fileName); } private void loadFromDisk(String fileName){ System.out.println("Loading " + fileName); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class ProxyImage implements Image{ private RealImage realImage; private String fileName; public ProxyImage(String fileName){ this.fileName = fileName; } @Override public void display() { if(realImage == null){ realImage = new RealImage(fileName); } realImage.display(); } }
|
1 2 3 4 5 6 7 8 9 10 11 12
| public class ProxyPatternDemo { public static void main(String[] args) { Image image = new ProxyImage("test_10mb.jpg"); image.display(); System.out.println(""); image.display(); } }
|