PHP 設計パターン学習における「プロトタイプ モード」の簡単な分析

PHPz
リリース: 2023-03-23 11:36:39
転載
532 人が閲覧しました

この記事では、PHP デザインパターンのプロトタイプパターンを理解し、適用可能なシナリオ、利点と欠点、実装コードを紹介します。興味のある友人は一緒に見てください。みんな。

PHP 設計パターン学習における「プロトタイプ モード」の簡単な分析

プロトタイプ パターンは、作成パターンの一種です。 主にオブジェクトのクローン作成の場合、クローンされたオブジェクトはプロトタイプと呼ばれますが、プロトタイプ モードをクローン モードと呼ぶ方が適切かもしれません。 プロトタイプ インスタンスを使用して、作成するオブジェクトのタイプを指定し、これらのプロトタイプをコピーして新しいオブジェクトを作成します。

該当するシナリオ:

  • インスタンス化されたオブジェクトのリソース オーバーヘッドが高すぎる場合は、直接クローンを作成できます。

  • ループ内で多数のオブジェクトを作成する必要があるため、この時点ではクローン作成も良い選択です。

利点:

  • 高パフォーマンス: オブジェクトの作成プロセスが複雑な場合、または大量のリソースを消費する場合、その後、直接クローンを作成します。このプロセスは、高いパフォーマンスを実現しながら簡素化できます。

  • 実装は簡単で、シナリオによっては、オブジェクトをインスタンス化するさまざまな事前操作と比較して、キーワードの複製を実行できます。

欠点:

複製されたオブジェクトはプロトタイプ オブジェクトと同じではないため、一部のビジネス シナリオでは影響を受ける可能性があります

コード:

//抽象出来一个操作系统的类
abstract class OS {
    public $os;
    //setOS可以理解为安装操作系统
    public function installOS($os) {
        $this->os = $os;
    }

    //runOS可以理解为运行操作系统
    public function runOS() {
        return $this->os . PHP_EOL;
    }

    //__clone方法是原型模式中需要有的,尽管可能用不上
    abstract function __clone();
}


class Windows extends OS{
    public function __clone() {}
}


class Linux extends OS{
    public function __clone() {}
}


//调用端============================================
//伟大的工程师们开发好了两套操作系统
$windows = new Windows();
$linux   = new Linux();

//把它们克隆到光盘上,分别给3个用户安装。这样就不用在从零开发操作系统了,直接复制开销极小,然后把它们运行起来。
for($i = 0; $i < 3; $i ++) {
    $new_windows = clone $windows;
    $new_windows->installOS(&#39;windows&#39;);
    echo $new_windows->runOS();
}


//把它们克隆到光盘上,分别给2个用户安装。这样就不用在从零开发操作系统了,直接复制开销极小,然后把它们运行起来。
for($j = 0; $j < 2; $j ++) {
    $new_linux = clone $linux;
    $new_linux->installOS(&#39;linux&#39;);
    echo $new_linux->runOS();
}
ログイン後にコピー

推奨学習: 「PHP ビデオ チュートリアル

以上がPHP 設計パターン学習における「プロトタイプ モード」の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:juejin.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート