PHPデザインパターンの組み合わせモード - ツリー構造データの処理

齐天大圣
リリース: 2023-04-09 12:42:02
オリジナル
1801 人が閲覧しました

結合モードについては、ツリー構造でデータを処理するために使用されるものであり、私たちが理解している結合関係とは何の関係もありません。ツリー構造でしかデータを処理できないため、日常生活ではあまり使用されませんが、ツリー構造が満たされている場合は、このモードを使用すると非常にうまく処理でき、コード量を大幅に削減して作成することができます。コードは簡潔かつ明確に書かれています。

定義

構成パターンは構造設計パターンであり、これを使用してオブジェクトをツリー構造に組み合わせることができ、次のようになります。彼らは独立した物体を好みます。その核心は再帰にあり、それによってツリー構造のデータが順番に処理されます。

#シナリオ

ファイル ディレクトリ ツリーは、典型的なツリー構造のデータです。以下は、ファイルまたはディレクトリのサイズを計算するために使用されるクラスを示しています。このクラスには、子ノード (サブツリー) addNode を追加するメソッドと、ファイルまたはディレクトリのサイズをカウントする fileSize という 2 つの主なメソッドがあります。

class File
{
    private $path = '';
    private $nodes = [];
    private $fileSize = 0;
    
    public function __construct(string $path, int $fileSize)
    {
        $this->path = $path;
        $this->fileSize = $fileSize;
    }
    
    public function addNode (File $node)
    {
        $this->nodes[] = $node;
    }
    
    public function fileSize ()
    {
        $size = 0;
        foreach ($this->nodes as $node) {
            $size += $node->fileSize();
        }
        return $size;
    }
}
ログイン後にコピー

次のディレクトリ ツリーは以下でシミュレートされます

/app

/app/1.txt
/app/a
/app/b

/app/a/a1.txt
/app/b/b1.txt
/app/b/b2.txt
ログイン後にコピー

テスト コードは次のとおりです:

$node0 = new File('/app', 0);

$node1 = new File('/app/1.txt', 1000);
$node2 = new File('/app/a', 0);
$node3 = new File('/app/b', 0);

$node21 = new File('/app/a1.txt', 1000);
$node31 = new File('/app/b1.txt', 1000);
$node32 = new File('/app/b2.txt', 1000);

$node2->addNode($node21);
$node3->addNode($node31);
$node3->addNode($node32);
$node0->addNode($node1);
$node0->addNode($node2);
$node0->addNode($node3);

// 计算目录/app/b大小
echo $node3->fileSize() . 'B' . PHP_EOL; // 2000
// 计算/app目录大小
echo $node0->fileSize() . 'B' . PHP_EOL; // 4000
ログイン後にコピー

概要

結合モードは、オブジェクトのグループをツリー構造に編成し、オブジェクトをツリーのノードとして扱います。ツリー状のデータ構造を利用し、再帰を使用して各サブツリーを処理することで、コードの実装が簡素化されます。このモードはデータに対する要件が厳しいため、日常生活ではあまり使用されません。このモードを使用する場合は、ビジネス シナリオをよく理解し、データをツリー構造に抽象化できる必要があります。一般に、私たちがよく目にするものには、ファイル ディレクトリ ツリー、Infinitus 分類処理などが含まれます。

以上がPHPデザインパターンの組み合わせモード - ツリー構造データの処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!