色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java 委托模式和代理模式

錢艷冰1年前8瀏覽0評論

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方法。