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.
何时使用?一般当希望隐藏目标对象的创建和访问时(比如缓存),或者希望在访问目标对象时提供额外的逻辑(动态代理)。
使用频率: Medium High
UML Class Diagram
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