我有一个类RT
建模一个有根树(实质上)。设计模式:只有实例类,如果它不是已经实例化的对象的副本
比方说,我已经拿着下面的树实例rt1
:
1
/\
0 2
现在,我可以构造另一个实例(rt2
)持以下三种:
5
/\
4 9
然而,很明显这两棵树是同构的(即它们具有相同的结构,并且与重命名节点相同)。我已经有了一个常规计算,两棵有根树是否是同构的(所以这个子问题已经解决了)。
现在我的问题:为了我的目的,我想要一个设计模式,防止程序实际构建一个新的实例rt2
,而只是给元素rt1
(它已经构建)的引用。
在另一方面,考虑另一棵树(rt3
),即如下:
1
/\
2 5
/
7
呼吁该图应该创建表示此图的新实例(因为这不是同构rt1
建设程序,因此 - 至今尚未产生)。
有这样的事吗?
我看着工厂模式,但我不知道(工厂似乎总是构建一个新的元素)。任何一个人都可以告诉我一种解决这个特殊问题的“最佳实践”方法。
您是否需要全局访问对象?辛格尔顿可能是当时要走的路。 – 2013-04-21 12:53:49
工厂可以缓存构造元素并返回它们而不是构造新的实例。但是create()方法的参数是什么? – 2013-04-21 12:56:13
@JBNizet感谢您的回答。这是我的走向的路线。这是“现实”吗?或者还有其他可能性(由于某些原因更广泛使用)? create()方法的参数是(例如)树的边缘。 – phimuemue 2013-04-21 12:58:49