如果要在Java中向现有类添加新行为,可以继承或使用Decorator模式。如果使用Decorator模式,最终必须实现接口中的所有方法,只需调用装饰对象:
class DecoratedList<T> extends List<T>
{
List<T> baseList;
int size() {
return baseList.size();
}
//..like the method above, but for every method on List..
//The added behaviour
T secondThing() {
return baseList.get(1);
}
}
而继承子,你不需要传递所有的样板方法。
class DecoratedList<T> extends ArrayList<T>
{
//The added behaviour
T secondThing() {
return list.get(1);
}
}
这个问题是,这只能在你需要ArrayList的地方使用,并且只能在你有权访问ArrayList的构造的地方使用(我知道在这个例子中你可以将元素从ArrayList复制到DecorativeList)你自己创造,但这只适用于列表,并不总是合适的。)
是否有一些方法可以添加到类中,如果在DecorativeList类中找不到该方法,则将其转发到baseList,以避免使用一堆不做任何操作的衬里方法新:
class DecoratedList<T> extends List<T>
{
List<T> baseList;
//pseudocode
methodNotFound(method, arguments) {
method.InvokeOn(baseList, arguments);
}
//The added behaviour
T secondThing() {
return baseList.get(1);
}
}