perl - 在对象实例上调用 new 有什么好处?

标签 perl oop constructor factory-pattern

我在看 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/

相关文章:

string - 如何获取给定字符串的子字符串,直到第一次出现指定字符?

perl - “perl -a”可以使用原始空格以某种方式重新加入@F吗?

loops - 重叠脚本: how to solve?

c++ - std::vector of objects/pointers/smart pointers to pass objects (bus error: 10)?

c++ - 构造函数中的部分模板推导

ruby - 仅适用于 cron :/usr/bin/env: ruby_executable_hooks: No such file or directory

java - 动态方法调度

php - 区别 static::class vs get_called_class() 和 __CLASS__ vs get_class() vs self::class

c# - 如何在另一个 Controller 中调用参数化构造函数 Controller Action ?

javascript - JavaScript 构造函数中的 "var"变量会发生什么?