java中如何实现委托
在Java中,委托(Delegate)模式可以通过接口、反射或Lambda表达式实现。以下是几种常见方法:
使用接口实现委托
定义一个接口,具体实现类通过实现接口方法完成委托功能。
interface Delegate {
void execute();
}
class ConcreteDelegate implements Delegate {
@Override
public void execute() {
System.out.println("具体委托逻辑");
}
}
class Delegator {
private Delegate delegate;
public void setDelegate(Delegate delegate) {
this.delegate = delegate;
}
public void performTask() {
delegate.execute();
}
}
使用反射实现委托
通过反射动态调用目标对象的方法。
import java.lang.reflect.Method;
class Delegator {
private Object target;
private String methodName;
public void setDelegate(Object target, String methodName) {
this.target = target;
this.methodName = methodName;
}
public void performTask() throws Exception {
Method method = target.getClass().getMethod(methodName);
method.invoke(target);
}
}
使用Lambda表达式或方法引用(Java 8+)
通过函数式接口简化委托实现。
@FunctionalInterface
interface Delegate {
void execute();
}
class Delegator {
private Delegate delegate;
public void setDelegate(Delegate delegate) {
this.delegate = delegate;
}
public void performTask() {
delegate.execute();
}
}
// 调用示例
Delegator delegator = new Delegator();
delegator.setDelegate(() -> System.out.println("Lambda委托"));
delegator.performTask();
使用java.util.function包(Java 8+)
直接利用内置函数式接口如Consumer、Supplier等。

import java.util.function.Consumer;
class Delegator {
private Consumer<String> delegate;
public void setDelegate(Consumer<String> delegate) {
this.delegate = delegate;
}
public void performTask(String input) {
delegate.accept(input);
}
}
// 调用示例
Delegator delegator = new Delegator();
delegator.setDelegate(System.out::println);
delegator.performTask("方法引用委托");
注意事项
- 接口实现是Java中最标准的委托模式,适合复杂逻辑。
- 反射灵活性高但性能较低,需处理异常。
- Lambda和函数式接口适合简单场景,代码更简洁。
- 委托常用于事件处理、策略模式等场景。






