2015-02-24 101 views
1

我的设计出现了一些小问题。将复合图案转换为具有其他行为的新图案

我们必须在我们使用的是复合图案来表示分层数据结构的内部框架: Framework domaim model object

这种分层数据结构由“阅读文件”的方法返回从框架到我们的应用程序和也被其他应用程序使用。

现在,在我们的应用程序,我们需要完全一样的数据结构(复合模式),但更多的行为:我们需要为每个实体额外GetCompareText()方法。而且此方法应在每个实体定义:

Application Domain Mode object

  • ContainerEntity应该实现对GetCompareText方法的默认行为为“容器”
  • LeafEntity应该实现的默认行为对于GetCompareText方法“叶”
  • 一些叶实体可以ovveride的行为(例如,LeafEntityA必须重写的行为,但LeafEntityB必须有默认行为)
  • 一些Container实体可以覆盖默认行为(ContainerEntityA使用默认行为,当ContainerEntityB覆盖它时)。

我们怎样才能做到这一点? 我们的应用程序中是否需要另一个复合模式? Decorator模式是一个选项吗?

我希望我很清楚

感谢您的协助!

伯努瓦

+0

您是否需要在框架和应用程序之间分开GetCompareText行为?您可以将GetCompareText包含在IEntity实现对象中(从框架返回),然后通过应用程序中的接口使用它们。 – 2015-02-24 09:06:02

+0

这是一个选项,但我宁愿分开这个。 GetCompareText与我们的新应用程序真正相关。我认为,使用框架的其他应用程序不应该知道这种行为。 – 2015-02-24 09:07:25

+0

装饰者似乎是这种情况下的明显选择?您还可以查看访问者模式,并只允许特定的应用程序访问GetCompareText行为的实体,但这会为您的设计增加更多层次复杂性? – 2015-02-24 09:15:07

回答

0

我已经实现Decorator模式为我的域模型对象是这样的:

Decorator Pattern

这是实现正确的吗?

什么是检索任何实体(如果存在的话返回装饰的一个实例,否则,返回默认装饰)适当的“装饰”的最佳解决方案?