我很难解决这个问题,我希望有人能帮助我。
我有一个责任链类,我想知道我是否可以(并且愿意)将其实现为 LinkedList 类的派生类。从本质上讲,责任链当然是一个链表,但我不确定从 LinkedList 派生在这里是否真的合适,因为每个实现的方法都需要能够在后继方法中调用相同的方法,如果当前失败。
你能实现类似 public class MyHandler : LinkedList<MyHandler>
的东西吗? ?这看起来像是一个递归定义,但编译器并不认为这是一个问题。
有人对此有任何见解吗?
最佳答案
是的,您可以从 LinkedList
继承,就像您可以从任何非 sealed 继承一样。类(class)。但是,我认为这不是一个好主意。继承不仅仅是为了重用方法。它传达了 "is a" relationship 。虽然责任链模式当然可以使用链表来实现,但责任链不是链表。
当从 LinkedList
类派生时,您将公开它的所有公共(public)方法。您还应该询问所有这些方法是否对您的类(class)有意义。我不认为LinkedList.Average()
对责任链有意义。
您应该将处理程序存储在链接列表中,该列表是责任链实现的私有(private)数据成员。
Can you implement something like public class MyHandler : LinkedList? That seems like a recursive definition, but the compiler doesn't consider it a problem.
是的,这是完全合法的。这是一个递归定义,在实现 composite pattern 时可以派上用场。 , 例如。这将
我建议不要以这种方式编写类,原因与您的责任链不应继承自 LinkedList
的原因相同,但这是可能的。
关于c# - 使用 LinkedList 实现责任链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6935062/