-6

これは、あなたが知っているかもしれないソフトウェア設計パターンに似ていますか?

私はインターフェースを持っています:

public interface IA {
}

およびシールされたその子クラス:

sealed public class A: IA {
}

タイプの代わりにタイプBのオブジェクトを使用したい別のテンプレート クラスができました。AT

template<class T>
public class B {
    T a;
    IA pa;

    B() {

    }
}

ただし、のコンストラクターでAは、テンプレートを次のように指定することはできません。B<A>また、エラー状態でAあるsealAテンプレートで使用することはできません。

この問題を解決するために、別のクラスを作成します。

public class C {
    A a;

    A GetA() {
        return a;
    }
}

次に、テンプレート クラスを書き換えBます。

template<class T>
public class B {
    C c;
    IA pa;

    B() {
        // initialize c=new C();
        // initialize pa=c.GetA();
    }
}

私のクラス階層にはいくつかの欠陥があると思います。テンプレート化またはジェネリックにしたいのですが、のようなクラスの導入は、C私が取り組んでいるものを維持していないようです。

インターフェイスも実装するクラスがさらにある場合はどうXなりYますか?ZIA


編集

私のプログラムは正常に動作するようになりました。上記のパターンを適用したかどうかはわかりません。そして、別のクラスができたらX

public class X: IA {
}

これXを のパラメーターとして使用するには、 X の代表クラスの新しいB<X>定義を次のように追加する必要があります。

public class RX {
    X x;

    RX() {
        x=new X();
    }

    X GetX() {
        return x;
    }
}

したがって、クラス B も次のように書き直す必要があります。

template<class T>
public class B {
    C c;
    RX x;
    IA pa;

    B() {
        // initialize c=new C();
        // initialize pa=c.GetA();;
        // if parameter X is used 
        // pa=x.GetX();
    }
}

ほら、きれいに見えません。

4

1 に答える 1

0

プロキシパターンと呼ばれるものだと思います。

于 2013-04-03T04:53:25.350 に答える