1

私はこれに頭を巻くのに苦労しています、そして誰かが私を助けてくれることを願っています。

私はChainofResponsibilityクラスを持っていますが、LinkedListクラスの派生物として実装できるかどうか(そして実装したいと思うかどうか)疑問に思っています。本質的に、Chain of Responsibilityはもちろんリンクリストですが、ここでLinkedListから派生することが本当に適切かどうかはわかりません。実装された各メソッドは、後続のメソッドで同じメソッドを呼び出すことができる必要があるためです。現在のものは失敗します。

あなたはのようなものを実装できますpublic class MyHandler : LinkedList<MyHandler>か?これは再帰的定義のように見えますが、コンパイラーはそれを問題とは見なしません。

誰かがこれについて何か洞察を持っていますか?

4

1 に答える 1

2

はい、封印されていないクラスLinkedListから継承できるのと同じように、から継承できます。しかし、それは良い考えではないと思います。継承は、メソッドを再利用するためだけのものではありません。それは「isa 」関係を伝えます。責任の連鎖パターンはリンクリストを使用して確実に実装できますが、責任の連鎖はリンクリストではありません

LinkedListクラスから派生するときは、そのすべてのパブリックメソッドを公開します。また、これらすべてのメソッドがクラスに適しているかどうかを確認する必要があります。LinkedList.Average()私は、責任の連鎖に何の意味も持たないと思います。

代わりに、責任の連鎖の実装のプライベートデータメンバーであるリンクリストにハンドラーを格納する必要があります。

public class MyHandler:LinkedListのようなものを実装できますか?これは再帰的定義のように見えますが、コンパイラーはそれを問題とは見なしません。

はい、これは完全に合法です。これは再帰的定義であり、たとえば、複合パターンを実装するときに役立ちます。これは

あなたの責任の連鎖がから継承されるべきではないのと同じ理由で、そのようにクラスを書くことはお勧めしませんLinkedListが、これは可能です。

于 2011-08-04T01:24:51.587 に答える