1

非常に曖昧で申し訳ありませんが、コンセプトの名前がわかりません。説明してみます。わかりやすいように動物に例えてみます。

私はジェネリックスーパークラスを持っています。このスーパークラスには、すべての動物が実行しなければならない機能が含まれています。たとえば、すべての動物サブクラスで「take_breath」サブを再定義したくないので、動物スーパークラス内で一度定義すると、すべての動物 (Animal::Cat、Animals::Dog、および Animals::Llama) が単純に$self->take_breath() にアクセスします。動物も同じ初期化ルーチンの多くを通過するので、単純に $class->SUPER::new(@_) を呼び出すたびに再定義するのではなく、その動物に固有のことを行います。

動物が初期化されるたびに、スーパークラスの初期化ルーチンが実行されます。何百もの動物がいて、これらは何百回も実行されます。さほど大きな問題ではありません。

しかし、これらの動物は賢く、LWP::UserAgent Web ブラウザの使い方を知っています。インターネットにアクセスするには、Web ページにログインしてセッション Cookie を設定する必要があります。それらはすべて同じログインを共有し、同じブラウザを共有したいと考えています。私の現在の実装では、ログイン ルーチンはスーパークラスの new メソッドの一部です。これは、動物が初期化されると、これが実行され、動物がログインすることを意味します。前述したように、私には何百もの動物がいて、何百もの POST 要求を送信したくありません。どうにかしてログイン ルーチンを一度起動し、それをスーパー クラスの一部にしたいと考えています。各動物は、$self->{'ua'} を実行して「共有」Web ブラウザにアクセスできます。

これで説明がつくことを願っていますが、この OOP 用語が何と呼ばれているのかわかりません。

動物が嫌いな人のためのTLDR

LWP::UserAgent を作成し、ログインし、セッション Cookie を設定するスーパークラスにログイン ルーチンがあります。サブクラスはすべて 1 つのログインを共有できます。サブクラスごとにログインするために何百もの POST リクエストを起動する必要はありません。どういうわけか一度ログインして、準備された $ua オブジェクトをすべてのサブクラスで共有したいと思います。

4

1 に答える 1