ホームページ > バックエンド開発 > PHPチュートリアル > PHPデザインパターン登録ツリーパターン分析PHPスキル

PHPデザインパターン登録ツリーパターン分析PHPスキル

jacklove
リリース: 2023-04-02 06:48:01
オリジナル
2396 人が閲覧しました

この記事では、PHP デザイン パターンの登録ツリー パターンを主に紹介し、登録ツリー パターンの概念、原理、実装方法、および関連する注意事項をサンプルの形式で詳細に分析します。

# この記事では、PHP 登録ツリー モードについて例を示して説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

登録ツリー モードとは何ですか?

登録ツリー モードは、当然、登録モードやレジストラ モードとも呼ばれます。ここであえて名前を付けたのは、名前登録ツリーの方が分かりやすいと思うからです。前の 2 つの記事と同様に、この記事も名前から始まります。登録ツリー パターンは、オブジェクト インスタンスをグローバル オブジェクト ツリーに登録し、必要に応じてオブジェクト ツリーから選択するパターン設計方法です。これを聞くと、私が子供の頃に砂糖漬けのサンザを棒に付けて買ったのを思い出します。砂糖漬けのサンザの売り手は砂糖漬けのサンザを大きな棒に刺し、人々はそれを買うときにそれを外していました。違いは、登録ツリー モデルは摘んだ後もそれを保持し、何度でも摘むことができますが、砂糖漬けのサンザシは一度摘むと消えてしまうことです。 。 。

登録ツリー モードを使用する必要があるのはなぜですか?

シングルトン モードは、プロジェクト全体で一意のオブジェクト インスタンスを作成する方法の問題を解決します。ファクトリ モードは、new を使用せずにインスタンス オブジェクトを作成する方法の問題を解決します。それでは、登録ツリー モードはどのような問題を解決したいのでしょうか?この問題を検討する前に、最初の 2 つのモデルが現在直面している制限を考慮する必要があります。まず、シングルトンモードで独自のオブジェクトを作成するプロセス自体にも、オブジェクトが存在するかどうかという判断があります。存在する場合はオブジェクトが返され、存在しない場合はオブジェクトが作成されて返されます。インスタンス オブジェクトが作成されるたびに、このような判断層が必要になります。ファクトリーモデルでは、延長メンテナンスの問題がより考慮されています。一般に、シングルトン パターンとファクトリ パターンは、より合理的なオブジェクトを生成できます。これらのオブジェクトを簡単に呼び出すにはどうすればよいでしょうか?さらに、このようにしてプロジェクト内で作成されたオブジェクトは、散在する兵士のようなものであり、全体の管理や配置には不便です。そこで、登録ツリー モデルが登場しました。シングルトン モード、ファクトリ モード、またはその 2 つの組み合わせのいずれでオブジェクトを生成したかに関係なく、オブジェクトはすべて登録ツリーに「挿入」されます。オブジェクトを使用するときは、登録ツリーから直接オブジェクトをフェッチするだけです。これは、グローバル変数を使用するのと同じくらい便利で実用的です。また、登録ツリー パターンは、他のパターンにも非常に良いアイデアを提供します。

#登録ツリーを実装するにはどうすればよいですか? 上記の説明により、解決策は簡単に見つかったようです。もちろん、最初に登録ツリーとしてクラスが必要です。すべてのオブジェクトが登録ツリーに「挿入」されます。この登録ツリーは静的変数によって提供される必要があります。そして、この登録ツリーは 2 次元配列である必要があります。このクラスには、オブジェクト インスタンスを挿入するメソッド (

set()

) が必要であり、それに対応して、オブジェクト インスタンスの設定を解除するメソッド (_unset()) も必要です。もちろん、最も重要なことは、オブジェクトを読み取るメソッド (get()) を用意することです。これらを使用すると、登録ツリー モードを無事に完了できます~~~3 つのモードを少し組み合わせてみましょう。インスタンス オブジェクトを作成するだけならそれほど複雑ではありませんが、大規模なプロジェクトに適用すると、その利便性は自明です。

<?php
//创建单例
class Single{
  public $hash;
  static protected $ins=null;
  final protected function __construct(){
    $this->hash=rand(1,9999);
  }
  static public function getInstance(){
    if (self::$ins instanceof self) {
      return self::$ins;
    }
    self::$ins=new self();
    return self::$ins;
  }
}
//工厂模式
class RandFactory{
  public static function factory(){
    return Single::getInstance();
  }
}
//注册树
class Register{
  protected static $objects;
  public static function set($alias,$object){
    self::$objects[$alias]=$object;
  }
  public static function get($alias){
    return self::$objects[$alias];
  }
  public static function _unset($alias){
    unset(self::$objects[$alias]);
  }
}
Register::set(&#39;rand&#39;,RandFactory::factory());
$object=Register::get(&#39;rand&#39;);
print_r($object);
ログイン後にコピー

この時点で、3 つの設計モードの導入は完了です。さまざまなパターン デザイン自体が相互に補完し合い、将来他のパターンを導入する際には、多かれ少なかれ 1 つまたは複数の他のデザイン パターンが使用されることになります。

特定のモデルを理解していなくても問題ありません。徹底的にプログラミングすることで、突然の進歩が得られると信じています。

興味があるかもしれない記事:

win10 Apache で仮想ホストを設定した後、localhost が使用できない問題の解決策


Laravel における固有の存在する検証ルールの最適化 詳細な php の例


php IP が有効な IP かどうかを判断する方法アドレス php の例


以上がPHPデザインパターン登録ツリーパターン分析PHPスキルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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