本篇文章為大家展示了php設(shè)計模式中處理樹形結(jié)構(gòu)數(shù)據(jù)怎么使用,代碼簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

關(guān)于組合模式,千萬不要從字面理解,它和我們理解的組合關(guān)系沒什么關(guān)系,它是用來處理樹狀結(jié)構(gòu)的數(shù)據(jù)。因為它只能處理樹形結(jié)構(gòu)的數(shù)據(jù),所以在日常中并不是很常用,但如果滿足了樹形結(jié)構(gòu),使用該模式就能非常好的處理,能夠大大減少代碼量,寫出的代碼簡潔明了。
定義
組合模式是一種結(jié)構(gòu)型設(shè)計模式, 你可以使用它將對象組合成樹狀結(jié)構(gòu), 并且能像使用獨立對象一樣使用它們。它的核心就在于遞歸,通過遞歸來依次處理樹形結(jié)構(gòu)數(shù)據(jù)。
場景
文件目錄樹就是一個典型的樹形結(jié)構(gòu)的數(shù)據(jù)。下面展示一個用于計算文件或目錄大小的功能的類,主要有兩個方法,添加子節(jié)點(子樹)addNode,統(tǒng)計文件或目錄大小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;
}
}下面模擬出以下的目錄樹
/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總結(jié)
組合模式,將一組對象組織成樹形的結(jié)構(gòu),然后將對象看做是樹的節(jié)點。利用樹形的數(shù)據(jù)結(jié)構(gòu),使用遞歸來處理每個子樹,依次來簡化代碼實現(xiàn)。因為該模式對于數(shù)據(jù)有嚴格的要求,所以在日常中用到的并不多。如想使用該模式,需要你對業(yè)務(wù)場景非常的了解,然后能把數(shù)據(jù)抽象成樹形結(jié)構(gòu)。一般我們常見的有,文件的目錄樹、無限極分類的處理等等。
上述內(nèi)容就是php設(shè)計模式中處理樹形結(jié)構(gòu)數(shù)據(jù)怎么使用,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。
當前名稱:php設(shè)計模式中處理樹形結(jié)構(gòu)數(shù)據(jù)怎么使用-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://www.yijiale78.com/article12/dehcdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站內(nèi)鏈、微信小程序、網(wǎng)站設(shè)計公司、服務(wù)器托管、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容