php – Composite模式带给我的只有Array有什么优势?
发布时间:2020-12-13 22:41:16 所属栏目:PHP教程 来源:网络整理
导读:我最近正在研究树结构,多个节点,多个可增加的级别以及print()方法. 起初,我认为它应该是一个复合词,然后我写下了一些可能的设计和代码: $struc = new Node(‘name0’,‘id0’,‘desc0’);$node1 = new Node(‘node1’,‘id1’,‘desc1’);$node2 = new Node
我最近正在研究树结构,多个节点,多个可增加的级别以及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模式. -- 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,这使得调试和维护程序变得更加容易. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |