软件模式——这是什么?

本文关键字:是什么 软件 模式 | 更新日期: 2023-09-27 18:07:14

这与您可能知道的一些软件设计模式相似吗?

我有一个接口:

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, YZ等,也实现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();
    }
}

你看,它看起来不整洁。

软件模式——这是什么?

我想这叫做代理模式。