首先,我认为这不一定是一个好主意,我只是看看这是否真的可能。我可以看到一些好处,例如不必显式转换为我们发送给客户端的对象,以及使用接口将某些存在安全问题的字段列入黑名单。我绝对不会坚持这个想法,但我想试一试。
我们使用 Spring MVC + Jackson 直接从对象生成 JSON。我们的域对象包含发送给客户端的必要数据,并且我们有一个错误字符串列表,根据需要添加到每个传出的 JSON 请求中。
所以返回的 JSON 可能类似于
{ name: 'woohoo', location : 'wahoo', errors : ['foo'] }
目前,我们有一个类来模拟客户端应该是什么,但我们总是用错误方法扩展一个公共基类。
所以,我们有:
interface NameAndLoc {
String getName();
String getLocation();
}
和
interface ResponseErrors {
List<String> getErrors();
void appendError(String);
}
我们有两个实现这些接口的类,并希望 CGLIB 生成一个新的实现类:
interface NameAndLocResponse extends NameAndLoc, ResponseErrors {}
目前,使用 CGLIB mixins,我可以生成具有以下内容的对象:
Object mish = Mixin.create(
new Class [] {NameAndLoc.class, ResponseErrors.class},
new Object [] { new NameAndLocImpl(), new ResponseErrorsImpl() } );
然后我可以将对象转换为 NameAndLoc 或 ResponseErrors,但是,我想做的是创建一个使用相同支持类但实现 NameAndLocResponse 接口的对象,而不必扩展我们的常见错误处理类然后实现 NameAndLoc .
如果我尝试用我拥有的东西进行投射,它会出错。我确信这是可能的。
我认为它与此非常相似,但不完全是: http ://www.jroller.com/melix/entry/alternative_to_delegate_pattern_with