我有一个抽象类,它有一系列抽象的东西:
Abstract Color has abstract ColorThings[]
我有几个具体的类,每个类都有一系列具体的东西:
Concrete RedColor has concrete RedThings[]
Concrete BlueColor has concrete BlueThings[]
所有相关:
RedColor and BlueColor are Colors.
RedThings[] and BlueThings[] are ColorThings[].
我需要什么设计模式?我已经有一个工厂方法,任何Color子类必须能够生成适当的ColorThing。但是,我也希望能够在Color中使用这个方法,这些子类不需要实现:
addColorThing(ColorThing thing) {/*ColorThing[] gets RedThing or BlueThing*/}
此外,我希望每个子类能够将super.ColorThings []实例化为他们自己的数组版本:
class RedColor {
colorThings[] = new RedThings[];
}
Java是否允许这样做?我可以更好地重新设计它吗?
答案 0 :(得分:2)
泛型将让你做你想做的事:
abstract class Color<T extends ColorThings> {
protected T[] things;
}
class RedColor extends Color<RedThings> {
}
// And so on.
这里的想法是Color
的每个子类都需要声明它们使用的ColorThings
的特定子类。通过使用类型参数T
,您可以实现此目的。