在Java語言中,代理模式和委托模式是兩種常用的設計模式,它們都是用于在一個對象(被委托或被代理者)與其他對象進行互動時提供更加優良的解決方案。下面分別介紹一下兩種模式的具體實現。
代理模式: public interface Subject { void request(); } public class RealSubject implements Subject { @Override public void request() { System.out.println("RealSubject: handling request."); } } public class Proxy implements Subject { private RealSubject realSubject; @Override public void request() { if (realSubject == null) { realSubject = new RealSubject(); } realSubject.request(); } } 上述代碼實現了一個簡單的代理模式。在此模式中,使用Proxy類來間接訪問RealSubject對象。客戶端只與Proxy對象交互,而不直接與RealSubject對象交互。Proxy對象持有RealSubject對象的一個引用,并通過此引用來調用RealSubject對象的方法。 Proxy類可以對客戶端進行一些額外的控制,比如權限控制、流量控制等。 委托模式: public interface Eating { void eat(); } public class ChineseEating implements Eating { @Override public void eat() { System.out.println("I'm eating Chinese food."); } } public class AmericanEating implements Eating { @Override public void eat() { System.out.println("I'm eating American food."); } } public class Person { private Eating eating; public void setEating(Eating eating) { this.eating = eating; } public void eat() { eating.eat(); } } 上述代碼實現了一個簡單的委托模式。Person對象委托Eating對象來完成吃飯的行為,并使用setEating()方法將Eating對象注入到Person對象中。客戶端通過Person對象來調用吃飯的方法,由于委托的存在,Person對象將真正的吃飯行為委托給了Eating對象,從而實現了真正的行為執行。委托模式的優點是可以將不同的實現方式委托給不同的對象來完成,從而實現更加靈活的編程方式。