当它们表示相同但具有不同数据结构时,如何避免在同一个地方存储不同类型的对象

时间:2010-01-14 13:20:21

标签: asp.net python algorithm design-patterns ironpython

在我看来,这是一个抽象的问题,我希望我能解释清楚。我碰巧在一个完全不同的项目中发现了同样的问题,现在我再次拥有它,如果可能的话我想避免它。

我正在创建一些类来简化某些任务,以满足我们在某些项目中的某些特定要求。

我有一个类创建对象,这些对象将webcontrols中的值映射到与此类似的对象属性

http://msdn.microsoft.com/en-us/library/aa478957.aspx

我遇到的问题有时我必须将非容器对象存储在一个地方(在对象的属性中),有时我必须在同一个地方存储一个容器对象来存储webcontrol的值(webcontrol)有时可以保存多个值,如checkboxlist)。我根本不喜欢这个,因为前一段时间在非商业编译器中工作时,在解析和生成中间代码时,我有时会将容器存放在某个地方,有时我不得不将非容器存放在同一个地方并且不得不在代码的其他部分询问,如果您正在阅读的是这种类型的对象,或者这种类型的对象,这是非常烦人的事情,它会使代码陷入困境。有什么建议可以避免出现这种情况,或者有时候什么都不做可以避免它?

3 个答案:

答案 0 :(得分:1)

我不确定我理解你的问题,但也许Visitor pattern正是你要找的?

答案 1 :(得分:1)

对我来说听起来像复合模式。 Composite将提供一个接口来处理对象和叶子对象(不是容器的对象)的容器。

答案 2 :(得分:1)

这是多态性问题。

“有时我必须将非容器对象存储在...对象的属性中,有时我必须在同一个地方存储容器对象”

你有两件事应该是多态的。

解决此问题的最简单方法是始终使用容器。如果要存储单个非容器对象,请将其“包装”在仅包含一个对象的容器中。

然后你总是有容器。有时容器有一个对象,有时它有多个对象。