本篇文章為大家展示了php設(shè)計(jì)模式中處理樹(shù)形結(jié)構(gòu)數(shù)據(jù)怎么使用,代碼簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、主機(jī)域名、虛擬主機(jī)、網(wǎng)絡(luò)營(yíng)銷(xiāo)、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。
關(guān)于組合模式,千萬(wàn)不要從字面理解,它和我們理解的組合關(guān)系沒(méi)什么關(guān)系,它是用來(lái)處理樹(shù)狀結(jié)構(gòu)的數(shù)據(jù)。因?yàn)樗荒芴幚順?shù)形結(jié)構(gòu)的數(shù)據(jù),所以在日常中并不是很常用,但如果滿足了樹(shù)形結(jié)構(gòu),使用該模式就能非常好的處理,能夠大大減少代碼量,寫(xiě)出的代碼簡(jiǎn)潔明了。
定義
組合模式是一種結(jié)構(gòu)型設(shè)計(jì)模式, 你可以使用它將對(duì)象組合成樹(shù)狀結(jié)構(gòu), 并且能像使用獨(dú)立對(duì)象一樣使用它們。它的核心就在于遞歸,通過(guò)遞歸來(lái)依次處理樹(shù)形結(jié)構(gòu)數(shù)據(jù)。
場(chǎng)景
文件目錄樹(shù)就是一個(gè)典型的樹(shù)形結(jié)構(gòu)的數(shù)據(jù)。下面展示一個(gè)用于計(jì)算文件或目錄大小的功能的類(lèi),主要有兩個(gè)方法,添加子節(jié)點(diǎn)(子樹(shù))addNode,統(tǒng)計(jì)文件或目錄大小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; } }
下面模擬出以下的目錄樹(shù)
/app /app/1.txt /app/a /app/b /app/a/a1.txt /app/b/b1.txt /app/b/b2.txt
測(cè)試代碼如下:
$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); // 計(jì)算目錄/app/b大小 echo $node3->fileSize() . 'B' . PHP_EOL; // 2000 // 計(jì)算/app目錄大小 echo $node0->fileSize() . 'B' . PHP_EOL; // 4000
總結(jié)
組合模式,將一組對(duì)象組織成樹(shù)形的結(jié)構(gòu),然后將對(duì)象看做是樹(shù)的節(jié)點(diǎn)。利用樹(shù)形的數(shù)據(jù)結(jié)構(gòu),使用遞歸來(lái)處理每個(gè)子樹(shù),依次來(lái)簡(jiǎn)化代碼實(shí)現(xiàn)。因?yàn)樵撃J綄?duì)于數(shù)據(jù)有嚴(yán)格的要求,所以在日常中用到的并不多。如想使用該模式,需要你對(duì)業(yè)務(wù)場(chǎng)景非常的了解,然后能把數(shù)據(jù)抽象成樹(shù)形結(jié)構(gòu)。一般我們常見(jiàn)的有,文件的目錄樹(shù)、無(wú)限極分類(lèi)的處理等等。
上述內(nèi)容就是php設(shè)計(jì)模式中處理樹(shù)形結(jié)構(gòu)數(shù)據(jù)怎么使用,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。