Mode combiné du modèle de conception PHP - traitement des données de structure arborescente

齐天大圣
Libérer: 2023-04-09 12:42:02
original
1816 Les gens l'ont consulté

Concernant le mode combinaison, ne le prenez pas au pied de la lettre. Il n'a rien à voir avec la relation de combinaison que nous comprenons. Il est utilisé pour traiter des données dans une structure arborescente. Parce qu'il ne peut traiter les données que dans une structure arborescente, il n'est pas très couramment utilisé dans la vie quotidienne. Cependant, si la structure arborescente est satisfaite, elle peut très bien être traitée en utilisant ce mode, ce qui peut réduire considérablement la quantité de code et créer des problèmes. le code écrit de manière concise et claire.

Définition

Le modèle de composition est un modèle de conception structurelle, vous pouvez l'utiliser pour combiner des objets dans une structure arborescente, et peut être comme Utilisez-les comme des objets autonomes. Son cœur réside dans la récursivité, grâce à laquelle les données structurées en arborescence sont traitées séquentiellement.

Scène

L'arborescence des répertoires de fichiers est une donnée structurée en arborescence typique. Ce qui suit montre une classe utilisée pour calculer la taille d'un fichier ou d'un répertoire. Elle comporte deux méthodes principales : ajouter un nœud enfant (sous-arbre) addNode et compter la taille d'un fichier ou d'un répertoire fileSize.

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;
    }
}
Copier après la connexion

L'arborescence de répertoires suivante est simulée ci-dessous

/app

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

/app/a/a1.txt
/app/b/b1.txt
/app/b/b2.txt
Copier après la connexion

Le code du test est le suivant :

$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
Copier après la connexion

Résumé

Le mode combiné organise un groupe d'objets dans une structure arborescente, puis traite les objets comme des nœuds de l'arborescence. Utilisez une structure de données arborescente et utilisez la récursion pour traiter chaque sous-arbre, ce qui simplifie la mise en œuvre du code. Ce mode ayant des exigences strictes en matière de données, il n’est pas beaucoup utilisé dans la vie quotidienne. Si vous souhaitez utiliser ce mode, vous devez avoir une bonne compréhension du scénario métier et ensuite être capable de résumer les données dans une structure arborescente. Généralement, ce que nous voyons couramment inclut les arborescences de répertoires de fichiers, le traitement de classification Infinitus, etc.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal