我有一个接口,让我们说2个方法,并有3个不同的实现。
public interface IFace {
public void method1(Param param1);
public void method2(Param param2);
}
public class A implements IFace {
public void method1(Param param1){}
public void method2(Param param2){}
}
public class B implements IFace {
public void method1(Param param1){}
public void method2(Param param2){}
}
public class C implements IFace {
public void method1(Param param1){}
public void method2(Param param2){}
}
现在我有一个要求,根据这个要求,这两种方法中只有一种需要修改,并且有一些前提条件,我决定调用特定的实现,模式是我可能必须经历的那些逐个实现。这看起来非常适合责任链,我创造了这样的:
public interface IChain {
public void method1(Param param1);
public void setNextChain(IChain iChain);
}
public class AA implements IChain {
private IChain chain;
private IFace a;
public void method1(Param param1){
if (thisConditionIsSatisfied(param1)) {
a.method1(param1);
} else {
chain.method1();
}
}
public void setNextChain(IChain chain){
this.chain = chain
}
public void setA(IFace a) {
this.a = a;
}
}
public class BB implements IChain {
private IChain chain;
private IFace b;
public void method1(Param param1){
if (thisConditionIsSatisfied(param1)) {
b.method1(param1);
} else {
chain.method1();
}
}
public void setNextChain(IChain chain){
this.chain = chain
}
public void setA(IFace b) {
this.b = b;
}
}
public class CC implements IChain {
private IChain chain;
public void method1(Param param1){
if (thisConditionIsSatisfied(param1)) {
//process it here
} else {
throw new RuntimeException("Couldn't process request.")
}
}
public void setNextChain(IChain chain){
this.chain = chain
}
}
正如您所看到的,CC不会委托给正在实施IFace的C类,而且是一个全新的实现。
这是我正在展示的一小部分,但问题实际上是相同的,我在条件评估,异常处理,调用接口的正确实现等方面看到了很多重复。
虽然这比尝试扩展现有界面要好得多,但我想知道是否有任何建议可以在未来的可扩展性或OOPS模式跟随方面做得更好。
答案 0 :(得分:0)
我不这么认为。虽然看起来它可以制作成更好的设计而且重复性更低,但它似乎并不存在。你的解决方案非常好,但在我看来,这可能是最好的方法。