我有一个接口,让我们说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
@Oleg是的,它会更适合于SoftwareEngineering StackExchange –
@VinceEmigh在引用其他网站时,指出交叉发布是不被赞同的](https://meta.stackexchange.com/tags/cross-posting/info) – gnat