Design patterns
patterns12ProxyPattern
- Path
- pkg8patterns/patterns12ProxyPattern.java
- Package
- pkg8patterns
- Study order
- 12
- Run
- Single-file source launch
- Command
- java pkg8patterns/patterns12ProxyPattern.java
There is no in-browser runner. This is the file from the curriculum, unchanged.
1package pkg8patterns;2 3/*4 * Proxy (Structural)5 * ------------------6 * INTENT: provide a surrogate/placeholder for another object to control access7 * (lazy loading, access control, caching, logging, remoting).8 * UML: Subject <|-- RealSubject and <|-- Proxy (proxy holds a RealSubject).9 * PROS: control/extend access without changing the real object.10 * CONS: extra indirection; possible latency.11 * REAL-WORLD: Spring AOP proxies, java.lang.reflect.Proxy, Hibernate lazy loading.12 */13public class patterns12ProxyPattern {14 15 interface Image { String display(); }16 17 // Expensive object18 static class RealImage implements Image {19 private final String file;20 RealImage(String file) { this.file = file; loadFromDisk(); }21 private void loadFromDisk() { System.out.println(" loading " + file + " from disk (expensive)"); }22 public String display() { return "showing " + file; }23 }24 25 // Virtual proxy: defers creation until first use (lazy loading)26 static class ImageProxy implements Image {27 private final String file;28 private RealImage real; // created on demand29 ImageProxy(String file) { this.file = file; }30 public String display() {31 if (real == null) real = new RealImage(file); // lazy init32 return real.display();33 }34 }35 36 public static void main(String[] args) {37 Image image = new ImageProxy("photo.png");38 System.out.println("proxy created (nothing loaded yet)");39 System.out.println(image.display()); // triggers load40 System.out.println(image.display()); // reuses, no reload41 }42}