抽象对象组成的模式

时间:2014-11-20 20:47:30

标签: java abstract-class composition concreteclass

我有一个抽象类,它有一系列抽象的东西:

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

1 个答案:

答案 0 :(得分:2)

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

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

class RedColor extends Color<RedThings> {
}

// And so on.

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

Read more in the docs ...