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

java 代理和委托的區(qū)別嗎

謝彥文2年前8瀏覽0評論

Java中的代理和委托是軟件開發(fā)中的兩個關(guān)鍵概念。它們都是實現(xiàn)對象的代碼重用,但是它們的實現(xiàn)方式和應(yīng)用場景卻有很大的不同。

Java代理是指在一個對象之前定義另一個對象。它通常用于實現(xiàn)實際對象的訪問控制。比如說,一個“RealSubject”對象可以被代理,在客戶端中只有“Subject”對象是可見的,而客戶端并不知道實際的“RealSubject”對象。

interface Subject {
void request();
}
class RealSubject implements Subject {
public void request() {
System.out.println("RealSubject.request()");
}
}
class Proxy implements Subject {
private RealSubject realSubject;
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
public void request() {
System.out.println("Proxy.request()");
realSubject.request();
}
}
public class Test {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
Proxy proxy = new Proxy(realSubject);
proxy.request();
}
}

Java委托是一個類或者對象旨在把任務(wù)分派給另一個類或者對象。它通常不是從一個接口繼承,而是通過組合。它可以充分利用代碼的重用和設(shè)計模式,因為它可以實現(xiàn)一種簡單的方式來改變系統(tǒng)中的行為。

interface Calculator {
int add(int a, int b);
}
class SimpleCalculator implements Calculator {
public int add(int a, int b) {
return a + b;
}
}
class MathCalculator implements Calculator {
private final Calculator calculator;
public MathCalculator(Calculator calculator) {
this.calculator = calculator;
}
public int add(int a, int b) {
int result = calculator.add(a, b);
System.out.println("MathCalculator.add(" + a + ", " + b + ") = " + result);
return result;
}
}
public class Test {
public static void main(String[] args) {
Calculator calculator = new SimpleCalculator();
calculator = new MathCalculator(calculator);
int result = calculator.add(1, 2);
System.out.println("result = " + result);
}
}

代理和委托都嘗試為應(yīng)用程序的應(yīng)用程序改進和性能優(yōu)化提供一些幫助。代理與委托之所以有所不同,是因為代理對象包含被代理對象的引用,而委托則是通過組合來實現(xiàn)的。如果需要保密性和訪問控制,代理就是首選。如果需要代碼重用和動態(tài)行為定義,那么委托就是首選。