【发布时间】:2013-05-17 12:19:02
【问题描述】:
我必须实现支持抽象数字的数据结构
集合是数字的集合
sorted 是一个排序好的集合
list 是数字的列表集合(包括重复项)
set 是没有重复的数字的集合。
Linked 和 Array 是保存数据的格式(linked 表示在堆中扩散,array 表示连续的内存量)
然后是类的组合(图中称为arraylist等数组的列表)
一个简单的 uml:
最后四个组合(图片中的最后一行)中的每一个都需要实现一个方法调用 sorted 来制作它们自己的排序副本(返回 Sorted 类型)。我想创建 4 个新类,它们是从 sorted 和最后一行中的类继承的(例如,从 Sorted 类和 ArrayList 类继承的 ArrayListSorted 类),但后来我遇到了菱形问题(在同一个例子中,Sorted 和ArrayList 都是 Collection 的后代)
有更好的设计理念吗?
【问题讨论】:
-
有一个普遍的看法,你应该prefer composition over inheritance。但是,根据您的实现语言,菱形继承模式不一定是问题。不寻常,我想知道是否有人一直在定义基类,因为他们可以,但如果你可以有多重继承,你应该能够处理菱形继承问题。
-
为什么不在 Collection 类中添加一个 sorted* 参数,每次调用 sorted() 时都会更新?
-
georges,问题是我没有编写 main 函数。有人告诉我,他们主要期望 sorted 将返回一个 Sorted 对象
标签: c++ design-patterns inheritance uml diamond-problem