php – Composite模式带给我的只有Array有什么优势?

前端之家收集整理的这篇文章主要介绍了php – Composite模式带给我的只有Array有什么优势?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近正在研究树结构,多个节点,多个可增加的级别以及print()方法.
起初,我认为它应该是一个复合词,然后我写下了一些可能的设计和代码
$struc = new Node(‘name0’,‘id0’,‘desc0’);
$node1 = new Node(‘node1’,‘id1’,‘desc1’);
$node2 = new Node(‘node2’,‘id2’,‘desc2’);
$node3 = new Node(‘node3’,‘id3’,‘desc3’);
$leaf1 = new Leaf(‘leaf1’,‘ld1’,‘lesc1’);
$leaf2 = new Leaf(‘leaf2’,‘ld2’,‘lesc2’);
$leaf3 = new Leaf(‘leaf3’,‘ld3’,‘lesc3’);
$leaf4 = new Leaf(‘leaf4’,‘ld4’,‘lesc4’);

$struc.add($node1);
$struc.add($node3);

$node1.add($leaf1);
$node1.add($leaf2);
$node1.add($node2);

$node2.add($leaf3);    
$node3.add($leaf4);

看起来不错,我认为并开始编码,print()方法可能会遵循Iterator模式.
但在编码过程中,我觉得这些简单的节点太复杂了吗?而且我必须实例化很多具体的类(超过50个,并且不断增加).然后我通过使用数组停止并思考一个简单的类似方法

-- Structure Class --
//To be more readable and clear,array here could be
//divided to 3 arrays(root/nodes/leafs),then connect
//in a similar way Composite does.
$struc = array('name0','id0','desc0','children'=>array(

               array('node1','id1','desc1','children' => array(
                     array('leaf1','ld1','lesc1'),array('leaf2','ld2','lesc2'),array('node2','id2','desc2','children'=>array(array('leaf3','ld3','lesc3'))
                     )
                  )
               ),array('node3','id3','desc3','children' => array(array('leaf4','ld4','lesc4'))
               )
           )
);

function print($node = $this->struct) {
    ...
    if(isset($node['children'])) $this->print($node['children']);
    ...
}

这两个设计看起来非常相似,现在我有点困惑,复合模式的价值是什么,我是否错过了这种模式的重要内容

composite pattern的要点是能够将对象集合视为单个对象(例如,用于显示它或将其写入文件).当你自己写“print()方法可能会跟随Iterator模式” – 好吧,复合模式的要点是你可以调用print()而不必担心你是打印单个Component还是必须迭代通过整个树.

但是看起来你一般都不清楚面向对象编程,因为你正在考虑使用嵌套数组.使用对象而不是散列(PHP数组是)的所有内容的值是type safety,这使得调试和维护程序变得更加容易.

原文链接:https://www.f2er.com/php/133309.html

猜你在找的PHP相关文章