用LinkedList实现责任链

时间:2011-08-04 01:01:07

标签: c# generics linked-list chain-of-responsibility

我很难缠绕这个,我希望有人可以帮助我。

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

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

有没有人对此有任何见解?

1 个答案:

答案 0 :(得分:3)

是的,您可以继承LinkedList,就像您可以继承任何非sealed类一样。但是,我认为这不是一个好主意。继承不仅仅是重用方法。它传达"is a" relationship。虽然责任链模式当然可以使用链表实现,但责任链不是链表。

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

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

  

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

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

我建议不要以同样的理由写这个课程,因为你的责任链不应该继承LinkedList,但这是可能的。