这两点
- 为了避免像 onClick 这样的“通用”名称,界面可能需要我拥有
- 区分多个接口中相同的方法名
通常通过使用适配器模式来解决。
interface IFoo {
void onClick();
void onChange();
}
class MyImpl {
void doSomething(){
// real code for onClick
}
void doSomethingElse(){
// real code for onChange
}
IFoo getFooAdapter(){
return new IFoo() {
@Override
public void onClick() {
doSomething();
}
@Override
public void onChange() {
doSomethingElse();
}
};
}
}
基本上,您创建一个中间步骤,它将对任何接口方法的所有调用转发到实际实现。
命名和签名可能会有所不同。如果需要,您还可以为不同的接口提供不同的适配器(或者如果两个接口具有不同行为的竞争方法,则必须提供)。
如何分发适配器实例有很多可能性——在某些情况下,每次创建一个新实例可能并不明智。
当然,这种模式不是为了好玩或仅仅为了最小和干净的代码而实现的。但它可以解决实际问题。