2

たとえば、ツリーデータ構造を持つ特定の外部ライブラリがあるとします。例:SサブクラスB1からへのスーパークラスB5。サブクラスにもサブクラスがある場合があります。

次に、このデータ構造にメソッドを追加します。通常、ポリモーフィズムを使用して実装します。各サブクラスは特定のメソッドを実装します。

ただし、外部ライブラリを扱っているため、元のクラスを変更することはできません。私の頭に浮かぶ2つの代替ソリューションがあります。

  1. を使用してケースをチェックするメソッドを使用して、新しいクラスを作成しますinstanceof
  2. 各クラスのサブクラスを作成し、そこにメソッドを実装します。

一般的なケースはどれですか?または、より良い代替ソリューションはありますか?

4

3 に答える 3

3

デコレータデザインパターンが役立つ場合があります。Classから拡張するデコレータクラスを持つことができますS。そしてそれも包みSます。デコレータでメソッドを実装できます。

于 2012-12-30T05:49:32.557 に答える
1

ビジターデザインパターンを使用すると、既存のデータ構造に新しい操作を「追加」することができます。

于 2012-12-30T05:20:34.920 に答える
1

デコレータパターンが役立つかもしれません

    class S2 extends S {
        S s;

        S2(S s) {
            this.s = s;
        }

         // delegate method calls to wrapped B1-B5 instance

        @Override
        void oldMethod1() {
            s.oldMethod1();
        }

...

         // add new methods
        void newMetod1() {
             ...
        }
    }

その後、それをとして使用します

new S2(new B1()); 

またはB1の既存のインスタンス

new S2(b1); 
于 2012-12-30T05:50:18.163 に答える