Java避免使用Decorator中的包装器方法

时间:2015-04-25 16:02:48

标签: java decorator

如果要在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);
    }
}

0 个答案:

没有答案