Java 代理與委托是面向對象編程中常用的編程模式,它們都是為了解決對象之間的交互問題。
Java 代理是一種設計模式,用于為對象提供一個代理或占位符,以便在訪問對象時可以添加額外的行為或控制訪問方式。Java 中有多種代理模式,包括靜態代理、動態代理和 Cglib 代理。其中,靜態代理是最簡單的一種代理方式,它需要手動編寫代理類和委托類,代碼如下:
public interface Subject { void request(); } public class RealSubject implements Subject { public void request() { System.out.println("RealSubject request"); } } public class ProxySubject implements Subject { private Subject subject; public ProxySubject(Subject subject) { this.subject = subject; } public void request() { System.out.println("ProxySubject before"); subject.request(); System.out.println("ProxySubject after"); } } public class Test { public static void main(String[] args) { RealSubject realSubject = new RealSubject(); ProxySubject proxySubject = new ProxySubject(realSubject); proxySubject.request(); } }
Java 委托是一種通過將任務分配給其他對象來實現對象之間通信的方式。它是將特定任務委托給其他對象完成,然后返回結果或通知原始對象。Java 中通過接口實現委托模式,實現方式如下:
public interface Task { void execute(); } public class ConcreteTask implements Task { public void execute() { System.out.println("ConcreteTask execute"); } } public class Delegator implements Task { private Task task; public void setTask(Task task) { this.task = task; } public void execute() { task.execute(); } } public class Test { public static void main(String[] args) { Delegator delegator = new Delegator(); ConcreteTask concreteTask = new ConcreteTask(); delegator.setTask(concreteTask); delegator.execute(); } }
Java 代理和委托都是通過將任務分配給其他對象來實現對象之間通信的方式,但它們的作用不同。代理通常用于添加額外的行為或控制訪問方式,而委托通常用于將任務分配給其他對象完成。