【发布时间】:2013-04-21 12:50:31
【问题描述】:
我有一个类 RT (本质上)对有根树进行建模。
假设我已经有一个实例rt1 持有以下树:
1
/ \
0 2
现在,我可以构造另一个包含以下树的实例 (rt2):
5
/ \
4 9
但是,很明显,这两棵树是同构的(即它们具有相同的结构,并且在重命名节点之前都是相同的)。我已经有一个计算两个有根树是否同构的例程(所以这个子问题已经解决了)。
现在我的问题:出于我的目的,我想要一种设计模式,它可以防止程序实际为rt2 构造一个新实例,而只是提供对元素rt1 的引用(它已经构造)。
另一方面,考虑另一棵树 (rt3),即:
1
/ \
2 5
/
7
为这个图调用的构造例程应该创建一个代表这个图的新实例(因为它与rt1 不同构,因此到目前为止还没有生成)。
有这种事吗?
我查看了工厂模式,但不确定(工厂似乎总是构造一个新元素)。谁能告诉我解决这个特定问题的“最佳实践”方式。
【问题讨论】:
-
您还需要对对象进行全局访问吗?单身人士可能是要走的路。
-
工厂可以缓存构造的元素并返回它们,而不是构造新的实例。但是 create() 方法的参数是什么?
-
@JBNizet 感谢您的回答。这与我的想法一致。这是“在现实中”完成的吗?还是有其他可能性(由于某些原因被更广泛地使用)?
create()方法的参数将是(例如)树的边缘。