Java中的委托模式和代理模式都是將功能委托給另一個對象來實現,但兩者的實現方式不同。委托模式是通過組合來實現代碼重用,而代理模式則是通過繼承或實現接口的方式來實現。
委托模式的核心是將一個類的具體實現委托給另一個類來完成。這個被委托的類通常是一個接口,而委托的類則需要實現這個接口。例如:
public interface IWorker { void doWork(); } public class Manager implements IWorker { private IWorker worker; public Manager(IWorker worker) { this.worker = worker; } public void doWork() { worker.doWork(); } } public class Programmer implements IWorker { public void doWork() { System.out.println("程序員正在寫代碼"); } } public static void main(String[] args) { IWorker worker = new Programmer(); Manager manager = new Manager(worker); manager.doWork(); // 輸出:程序員正在寫代碼 }
這里,Manager類持有一個IWorker對象,它來負責具體的工作,而Programmer實現了IWorker接口,完成具體的工作。
代理模式則是將客戶端與真正的對象隔離開來。代理類通常會實現真正對象的接口,并持有一個真正對象的引用??蛻舳藙t通過代理類來訪問這個真正的對象。例如:
public interface Image { void display(); } public class RealImage implements Image { private String fileName; public RealImage(String fileName) { this.fileName = fileName; loadImageFromDisk(); } public void display() { System.out.println("Displaying " + fileName); } private void loadImageFromDisk() { System.out.println("Loading " + fileName); } } public class ProxyImage implements Image { private RealImage realImage; private String fileName; public ProxyImage(String fileName) { this.fileName = fileName; } public void display() { if (realImage == null) { realImage = new RealImage(fileName); } realImage.display(); } } public static void main(String[] args) { Image image = new ProxyImage("test.jpg"); image.display(); // Loading test.jpg Displaying test.jpg }
這里,RealImage實現了Image接口,并封裝了真正的圖像加載操作。而ProxyImage也實現了Image接口,并持有一個RealImage對象的引用,它負責創建RealImage對象,并在需要顯示時調用RealImage的display方法。
上一篇css 小豬佩奇代碼
下一篇css 層疊上下文