【发布时间】:2017-08-10 23:22:42
【问题描述】:
我有一个接口,假设有 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 模式遵循方面变得更好。
【问题讨论】:
-
这个问题不是更适合软件工程吗? (我真的问我个人不在乎它在这里)
-
@Oleg 是的,它更适合 SoftwareEngineering StackExchange
-
@VinceEmigh 在提及其他网站时,指出cross-posting is frowned upon 通常会有所帮助
标签: java oop design-patterns object-oriented-analysis