淘先锋技术网

首页 1 2 3 4 5 6 7

在Java编程中,代理和委托是两个非常常见的设计模式,它们都是用来解决对象之间的协作问题的。虽然它们的作用有些相似,但是它们之间有着明显的区别。

首先,我们来看一下代理模式。

public interface Subject {
public void request();
}
public class RealSubject implements Subject {
public void request() {
System.out.println("真实的请求");
}
}
public class Proxy implements Subject {
private Subject realSubject;
public void request() {
if (realSubject == null) {
realSubject = new RealSubject();
}
preRequest();
realSubject.request();
postRequest();
}
public void preRequest() {
System.out.println("预处理");
}
public void postRequest() {
System.out.println("后处理");
}
}

上面的代码演示了一个最简单的代理模式。其中,主题接口代表了被代理者和代理者的公共职责,真实主题是被代理者,代理是代理者。代理中维护了一个真实主题的引用,通过条件判断是否需要创建真实主题,并在调用前后进行预处理和后处理。

那么,什么是委托呢?

public interface Print {
public abstract void print();
}
public class RealPrinter implements Print {
public void print() {
System.out.println("真正的打印");
}
}
public class PrinterDelegate {
private final Print print;
public PrinterDelegate(Print print) {
this.print = print;
}
public void print() {
print.print();
}
}

上述代码演示了委托模式。其中,打印接口表示被委托者的职责,真实打印者是被委托者,委托者是委托方。委托者持有被委托者引用并调用其方法,实现将委托者的任务交由被委托者完成。

那么它们之间的区别是什么呢?代理模式强调的是控制对象的访问,代理者可以对被代理者加以控制;委托模式强调的是对象间的合作,委托可以将任务交由不同的对象完成,而不需要控制其访问。因此,代理模式是一种结构型模式,而委托模式是一种行为型模式。