1

我很难解决这个问题,我希望有人可以帮助我。

我有一个责任链类,我想知道我是否可以(并且想要)将它实现为 LinkedList 类的派生类。从本质上讲,责任链当然是一个链表,但我不确定从 LinkedList 派生在这里是否真的合适,因为每个实现的方法都需要能够在后续方法中调用相同的方法,如果当前一个失败。

你能实现类似的东西public class MyHandler : LinkedList<MyHandler>吗?这似乎是一个递归定义,但编译器并不认为这是一个问题。

有人对此有任何见解吗?

4

1 回答 1

2

是的,您可以从 继承LinkedList,就像您可以从任何非密封类继承一样。但是,我认为这不是一个好主意。继承不仅仅是为了重用方法。它传达了一种“是”的关系。虽然责任链模式当然可以使用链表来实现,但责任链不是链表。

LinkedList类派生时,您将公开其所有公共方法。您还应该询问所有这些方法是否对您的课程有意义。我认为这LinkedList.Average()对责任链没有任何意义。

您应该将处理程序存储在一个链表中,该链表是您的责任链实现的私有数据成员。

你能实现类似 public class MyHandler : LinkedList 的东西吗?这似乎是一个递归定义,但编译器并不认为这是一个问题。

是的,这是完全合法的。例如,它是一个递归定义,可以在实现复合模式时派上用场。这个会

我建议不要以这种方式编写类,原因与您的责任链不应该继承自 相同LinkedList,但这是可能的。

于 2011-08-04T01:24:51.587 回答