-6

这是否类似于您可能知道的某些软件设计模式?

我有一个界面:

public interface IA {
}

及其密封的子类:

sealed public class A: IA {
}

现在我有了另一个模板类B,我想在其中使用类型对象来A代替T类型:

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

    B() {

    }
}

但是,构造函数A不允许我将模板指定为B<A>,并且错误状态A密封的,A不能在模板中使用。

为了解决这个问题,我创建了另一个类:

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, YandZ等也实现了IA接口怎么办?


编辑

我的程序现在工作正常,我只是不知道我是否应用了上述任何模式。而且一旦我有另一堂课X

public class X: IA {
}

并且为了将其X用作 的参数B<X>,我必须添加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 回答