很抱歉很含糊,但我不知道这个概念的名称。我会尽力解释。我会试着把它放在动物的角度来简化它。
我有一个通用的超类。这个超类包含所有动物都必须做的功能。例如,我不想在每个动物子类中重新定义“take_breath”子类,所以我在 Animals 超类中定义一次,所有动物(Animals::Cat、Animals::Dog 和 Animals::Llama)都可以简单地访问 $self->take_breath()。这些动物也经历了许多相同的初始化例程,而不是每次我简单地调用 $class->SUPER::new(@_) 以及做特定于该动物的事情时都重新定义它们。
话虽如此,每次初始化动物时,它都会经历其超类的初始化例程。有数百只动物,它们运行了数百次。这不是太大的问题。
然而,这些动物很聪明,并且知道如何使用 LWP::UserAgent 网络浏览器。为了访问互联网,他们必须登录网页并设置会话 cookie。他们都共享相同的登录名并希望共享相同的浏览器。在我当前的实现中,登录例程是超类新方法的一部分。这意味着当动物被初始化时,它会运行并且动物登录。正如我所说,我有数百只动物并且不想触发数百个 POST 请求。我想以某种方式启动登录例程并使其成为超类的一部分。然后每只动物都可以通过 $self->{'ua'} 访问“共享”网络浏览器。
我希望这能解释它,我不确定这个 OOP 术语叫什么。
TLDR 适合那些不喜欢动物的人
我在超类中有一个登录例程,它创建 LWP::UserAgent、登录并设置会话 cookie。子类都可以共享一个登录名。我不想为每个子类触发数百个 POST 请求来登录。我想以某种方式登录一次并与所有子类共享准备好的 $ua 对象。