我知道我可以编写这样的动态代理:
public class DecoratedFile implements java.lang.reflect.InvocationHandler {
private Object delegate;
public static Object newInstance(Object delegate) {
return java.lang.reflect.Proxy.newProxyInstance(
obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(),
new DecoratedFile (delegate));
}
private DecoratedFile (Object delegate) {
this.obj = obj;
}
public Object invoke(Object proxy, Method m, Object[] args)
throws Throwable
{
... do something to `delegate`
}
}
...可以像这样实例化:
File decorated = DecoratedFile.newInstance(new File("README.txt"));
有没有办法编写一个类,以便我可以使用“new”关键字实例化动态代理:
File decorated = new DecoratedFile(new File("README.txt"));
例如,重构非动态实现而不影响其客户端。
如果答案是“不,你不能”——这背后有设计原则吗?
最佳答案
没有。
“其背后的设计原则”是 JLS 所说的。
你需要的是工厂模式,或者抽象工厂模式,无论它们之间有什么区别。我一直不明白为什么会有两个。
关于java - 我可以让Java中的 `new X()`返回动态代理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21994955/