0

我有一个想要的生成对象:

  1. 保留现有功能,无需注入构造函数并重写要调用的每个方法injectedObject.sameMethod()
  2. 在不修改生成的对象的情况下向该生成的对象添加附加功能。

添加附加功能。

例如:

public class GeneratedObject {
    public String getThis() { ... }
    public String getThat() { ... }
}

public interface ObjectWrapper {
    String doThisWithThat();
}

public class ObjectWrapperImpl extends GeneratedObject implements ObjectWrapper {
    String doThisWithThat() { ... }
}

但是,向下转换是不允许的,什么是正确的实现而不重写一堆冗余代码只是为了包装对象?

4

3 回答 3

1

我认为装饰器模式可能会对您有所帮助:“装饰器模式可用于在运行时扩展(装饰)某个对象的功能,独立于同一类的其他实例”

于 2012-06-27T21:10:35.350 回答
0

如果您可以从中提取接口GeneratedObject,则可以使用动态代理来执行此操作。您将创建一个代理来实现提取的接口ObjectWrapper,并使用调用处理程序将GeneratedObject接口中的所有方法调用传递给委托,并将doThisWithThat()调用发送到其他地方。

代理并不漂亮,但丑陋至少是本地化的。

于 2012-06-27T23:14:49.030 回答
0

你试过aspectj吗? http://www.eclipse.org/aspectj/doc/next/progguide/semantics-declare.html 这有点复杂,但您的要求也是如此。

于 2012-06-27T22:38:56.007 回答