1

我有一个抽象类,其中包含一系列抽象事物:

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 允许这样做吗?我可以更好地重新设计它吗?

4

1 回答 1

2

泛型会让你做你想做的事:

abstract class Color<T extends ColorThings> {
    protected T[] things;
}

class RedColor extends Color<RedThings> {
}

// And so on.

这里的想法是每个子类都Color需要声明ColorThings它们使用的特定子类。通过使用类型参数T,您可以实现这一点。

在文档中阅读更多...

于 2014-11-20T20:51:13.660 回答