概述
- 委托即是一个对象请求另一个对象的功能,将特定任务的责任移交给另一个类或方法。
- 委托是复用的一种常见形式,准确的委托能够很好的实现复用。
- 委托是使用另一个类的对象。
- 委派可以被视为对象之间的关系,其中一个对象将特定方法调用转发到另一个对象。
实例
示例1:
如果执行如下代码:
b.foo;
b.bar;
那么应该得到如下的输出:
a.bar
b.bar
示例2:
在如下的例子中,CanonPrinter,EpsonPrinter,HpPrinter都实现了Printer,PrintController也实现了Printer。但是控制器并不实现打印的具体行为,而是将其委派给三个打印机中的一个。
public interface Printer {
void print(final String message);
}
public class CanonPrinter implements Printer {
private static final Logger LOGGER = LoggerFactory.getLogger(CanonPrinter.class);
@Override
public void print(String message) {
LOGGER.info("Canon Printer : {}", message);
}
}
public class EpsonPrinter implements Printer {
private static final Logger LOGGER = LoggerFactory.getLogger(EpsonPrinter.class);
@Override
public void print(String message) {
LOGGER.info("Epson Printer : {}", message);
}
}
public class HpPrinter implements Printer {
private static final Logger LOGGER = LoggerFactory.getLogger(HpPrinter.class);
@Override
public void print(String message) {
LOGGER.info("HP Printer : {}", message);
}
}
public class PrinterController implements Printer {
private final Printer printer;
public PrinterController(Printer printer) {
this.printer = printer;
}
@Override
public void print(String message) {
printer.print(message);
}
}
作用
- 运行时具有灵活性 ,委托在运行时很容易更改。
- 需要在另一个类中使用功能,但不希望更改该功能。
- 减少功能与类的耦合。
参考:
[1] https://www.javaguides.net/2018/08/delegation-in-java-with-example.html
[2] https://www.geeksforgeeks.org/delegation-vs-inheritance-java/