Perl面向对象编程:委托、继承与绑定技术解析
1. 委托(Delegation)
委托是一种对象将方法调用转发给指定委托对象的技术。例如,在下面的示例中, Employee
类将所有与税收相关的功能委托给 $accounting_dept
对象:
package Employee;
sub compute_after_tax_income {
$me = $_[0];
return $accounting_dept->compute_after_tax_income($me);
}
在某些情况下,你可能希望将类未处理的所有方法调用自动转发给委托对象。在 Perl 中,这很容易实现,因为当在包或其基类中找不到某个过程时,会调用 AUTOLOAD
函数:
package Employee;
sub AUTOLOAD {
my $obj = $_[0];
# $AUTOLOAD 包含缺失方法的名称
# 永远不要传播 DESTROY 方法
return if $AUTOLOAD =~ /::DESTROY$/;
# 去掉前面的包名(如 Employee::)
$AUTOLOAD =~ s/^.*:://;
$obj->{delegate}->$AUTOLOAD(@_); # 注意,$obj 仍然是 @_ 的一部分,