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; } }
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
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
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!