Java中的delegate和proxy兩種概念都是用來解決代碼復用問題的,但在實際應用中又有不同的用法。
Delegate(委托)是一種委托機制,它將任務委托給另一個對象去處理。在Java中,delegate通常是使用接口實現的。例如,一個Car接口可以由多個具體的實現類實現,當我們需要使用Car接口時,只需要將需要處理任務的對象委托給其中一個實現類就可以了,具體實現如下:
public interface Car { void drive(); } public class Jeep implements Car { @Override public void drive() { System.out.println("Jeep is driving on the road."); } } public class CarDealer { private Car car; public CarDealer(Car car) { this.car = car; } public void sellCar() { car.drive(); } } // 調用 CarDealer carDealer = new CarDealer(new Jeep()); carDealer.sellCar();
Proxy(代理)是一種通過代理類來完成某些操作的機制。它通常是在被代理對象的基礎上增加一些額外的操作,例如在某個方法調用前后進行日志記錄、緩存等操作。在Java中,代理類通常是使用接口實現的。例如,一個Car接口可以通過代理來添加日志記錄的功能,具體實現如下:
public interface Car { void drive(); } public class Jeep implements Car { @Override public void drive() { System.out.println("Jeep is driving on the road."); } } public class CarLoggerProxy implements Car { private Car car; public CarLoggerProxy(Car car) { this.car = car; } @Override public void drive() { System.out.println("Before driving ..."); car.drive(); System.out.println("After driving ..."); } } // 調用 CarLoggerProxy carLoggerProxy = new CarLoggerProxy(new Jeep()); carLoggerProxy.drive();
總之,delegate和proxy都是實現代碼復用的重要機制。它們通過委托和代理來實現任務的分配和操作的增強,提高了代碼的靈活性和可維護性,是Java編程中不可或缺的重要組成部分。