代码之家  ›  专栏  ›  技术社区  ›  phimuemue

设计模式:只有当类不是已经实例化的对象的副本时,才实例化它

  •  1
  • phimuemue  · 技术社区  · 13 年前

    我有课 RT 建模一棵有根的树(本质上)。

    比方说,我已经有了一个实例 rt1 持有以下树:

       1
      / \
     0   2
    

    现在,我 能够 构造另一个实例( rt2 )持有以下树:

       5
      / \
     4   9
    

    然而,很明显,这两棵树是同构的(即,它们具有相同的结构,并且在节点重命名之前是相同的)。我已经有了一个计算两个根树是否同构的例程(所以这个子问题已经解决了)。

    现在我的问题是:出于我的目的,我想要一种设计模式,它可以防止程序为 rt2型 ,但只提供对元素的引用 第1部分 (已建成)。

    另一方面,考虑另一棵树( rt3 ),即以下内容:

        1
       / \
      2   5
     /
    7
    

    为这个图调用的构造例程应该创建一个表示这个图的新实例(因为这不是同构于 第1部分 ,因此,到目前为止尚未生成)。

    有这样的事情吗?

    我看了一下工厂的模式,但我不确定(工厂似乎 总是 构造一个新元素)。有谁能告诉我解决这个特殊问题的“最佳实践”方法吗。

    3 回复  |  直到 13 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    你可以使用轻量级模式。

    1

    在蝇量级数组中,你持有所有的树,其中树是类型 ITree ( Flyweight ). ConcreteFlyweight 可以调用 BinaryTree 或者,作为你的名字 RT 。您必须在树实现中实现相等操作才能在中使用 GetFlyweight 方法

        2
  •  0
  •   bh5k    13 年前

    通常,当您想要一个对象的一个实例并想要返回该实例时,您会使用Singleton。不太确定你是如何将其与创建树联系起来的,但它可能是Singelton和Factory的混合。你所说的所有模式都是创造型模式: http://en.wikipedia.org/wiki/Creational_pattern

    以下是对辛格尔顿的描述: http://en.wikipedia.org/wiki/Singleton_pattern

        3
  •  0
  •   Melky    13 年前

    在我看来,您希望构建一个原型实例。在这种情况下,您会希望使用原型设计模式。

    请参阅: http://www.dofactory.com/Patterns/PatternPrototype.aspx

    推荐文章