2016-05-16 13 views
1

このコードを書き直すことによって、この次の例で開封の原則を適用したいと考えています。開封の原則の例

class MyQueue<E> extends ArrayList<E> implements Queue<E> { 
    int front=0, back=0; 
    MyQueue() { } 
    … 
    void put(E e) { add(back++, e); ...} 
    E get() { E elem = get(front++); …} 
} 

解決策はどのデザインパターンに最もよく一致し、なぜですか?それが次のベストマッチよりも優れた試合である理由を説明してください。

私はこのクラスがどのような機能を拡張するか考えていません。すでにゲッターとセッターがあります。どんなタイプの拡張機能を適用できるか分からずに、私はこのコードをどのように書き換えるのか分かりません。

私が知っているもの: OCPは延長延長のために開かれています。したがって、一般的なアプローチは、それを抽象化する方法を理解することです。だから私の最初の考えは抽象メソッドを持つ抽象クラスにすることでした。次に、MyQueue()を拡張するすべてのクラスは、望みどおりにgetterメソッドとsetterメソッドを実装できます。そして、私がこれを行うと、これはアダプターのパターンによく似ていると思います。

私が理解している間違いを修正してください。

+1

私はこれがなぜ落とされているのかわかりません...私は質問するためのガイドラインに従っています。誰かが明確にすることはできますか?それは理由を知らずにただ投票されるのを助けるものではありません。 –

+2

おそらく、それは宿題や意見を求めるように見えるために下落したでしょう。 – Andreas

+1

質問はとてもいいです。宿題に近いかもしれないが、それでも実際には「OCP」の理解に似ている。これは常に明白ではありません。 – RMachnik

答えて

1

私の観点から、これはArrayList実装に基づいてQueueを行う例です。まず第一に、私はQueueインタフェースメソッドだけを公開しようとします。 ArrayListから継承されるすべてのメソッドは、何とか隠されているはずです。

事は、私たちは、Javaで使用すると、相続時にパブリックメソッドを隠すことができないことを知っている、です。 次に、あなたが取ることができるアプローチは、それを無効にしてUnsupportedOperationExceptionまたはsthをこのように投げることです。

内部にArrayListに基づいて正しくQueueインターフェイスを実装する必要があります。 正しく実装する必要があります。addofferremovepoolelementpeekArrayListに由来する他のメソッドは、ある例外をスローする必要があります。

これは私の意見です。

+0

したがって、明確にするために、私はこの "MyQueue()"クラスをインターフェースとして作成し、add、offer、removeなどのArrayListにあるすべての関数を追加することをお勧めします。このgetters/setters/etc。正しい? –

+0

その場合、アダプターパターンに従うと仮定して正しいですか? –

+1

最初のコメントに応答します。 'MyQueue'クラスをキューとして見ることを提案しています。 2番目のコメントの回答:それは多かれ少なかれアダプタです。 'ArrayList'を' Queue'に適応しようとしています。私がそこに表示しようとしていたのは、 'Queue'のメカニズムとして' ArrayList'を使ってみてください。使用法に戻ると、 'Queue'インターフェースに' MyQueue'インスタンスを割り当てるべきです。 ようこそ: 'Queue yourQueue = new MyQueue()' – RMachnik