我在看 Programming Perl
,我找到了这个代码片段:
sub new {
my $invocant = shift;
my $class = ref($invocant) || $invocant;
my $self = {
color => "bay",
legs => 4,
owner => undef,
@_, # Override previous attributes
};
return bless $self, $class;
}
有了这样的构造函数,调用
new
有什么好处?在对象实例上?我想这就是它的用途,对吧?我的猜测是,如果有人想要编写这样的构造函数,他将不得不添加更多代码来将第一个对象的属性复制到将要创建的对象。
最佳答案
所以你可以在不知道原始类的对象是什么的情况下构造同一个类的另一个对象——这可以形成一些非常简洁的紧凑工厂模式。
例如,当您有需要构建的资源对象时,这很有用,因为需要和计算哪种资源对象的成本很高(例如,长时间运行的数据库查询)。因此,工厂会查看它是否传递了一个旧的资源对象,如果是,则只需调用 $old_object->new()
就可以创建一个类似的对象。 - 避免重新计算资源种类的资源成本。
再举一个例子,如果你有表示动物的类层次结构,以及在模拟中构建新动物的工厂,你可以调用 $newborn = $factory->make_new_animal($mother)
工厂实现仅仅是 $object->new()
关于perl - 在对象实例上调用 new 有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1621373/