我正在创建一个实现复合模式的类;该类应该能够表示一个树(所以我们称之为树)。
为了尽可能少地使用内存,当一个Tree类实例传递给一个数组时,它将作为一个数组保存,直到需要索引为止;此时创建并返回一个新的子Tree实例
这样做的原因:My Tree实例通过了许多过滤器,许多观察者可能会遍历和修改它们的内容,但它们的内容只会被请求一次(在最终渲染时)。此外,某些块可能根本不会被渲染,因此创建一个甚至不会被使用的Tree实例会浪费内存。
换句话说,如果使用
$class->set($array,$index); //(or $class[$index] = $array)
,数组正常存储。但是当有人使用
时$class->get($index) //(or $class[$index])
,将返回一个新的Tree实例(并为后续调用缓存)。
然而,我陷入两难境地:我是否
我知道这不是一个论坛,所以我不是在征求意见,而是征求已经在PHP中开发(可能很重)树结构的人的建议,以及最好的方法(或“接受方式”)去做吧。
答案 0 :(得分:1)
演示creating the Tree on construct和演示creating Tree on demand是您可以自行运行的简单测试。
后者只有在访问它们时才会创建新的节点对象,因此内存消耗不会很高。
面向对象编程,封装和外观的美妙之处在于,没有人关心你在内部做什么,只要API能够完成预期的工作。无论谁/使用你的TreeNode,都不需要知道它在内部是如何运作的。只要有正确的感觉就去。正确设计您的API,您可以随时更改内部。