我有一组类,每个类都需要在某个时候决定他们应该在内部使用哪两种或三种方法在外部实现相同的功能.理想情况下,这应该包括回退功能,如果ApproachA失败,它会通过尝试ApproachB(并且可能接近C,D等).到目前为止,我一直在使用类似的编码if (!success) { ApproachB code }.这样做的问题是,后面的几个方法也需要知道选择了哪种方法,并且所有这些方法都要开发自己的if (MethodChosen) { } else { }语句.我真的想用一些不那么笨拙的东西来解决这个问题......除了我认为的其他选择似乎都不那么"狡猾".以下是我想到的三种方法:
使用可在运行时更改的子类实现通常构造的抽象类:即
public void SomeMethodOrConstructor()
{
if (someConditions)
MyChild = ChildClassA;
else
MyChild = ChildClassB;
}
public void Execute()
{
MyChild.Execute();
}
Run Code Online (Sandbox Code Playgroud)选项3的问题是在需要时在两者之间传递数据.由于这些方法中的一些是在对象之外进行建模,因此这将是相当频繁的.嵌套类是否自动与父类共享数据?或者我是否必须在每次通话时都通过?
还有什么我应该考虑的吗?
更新:第一堂课正在运行责任链.目前,我选择在方法执行期间不使用策略模式或回退,因为我认为最终可能没有必要.我认为大多数这样的执行后备实际上会更好地保留在他们自己的课程中,因为不会完全改变游戏规划,只需要进行一些小的调整即可.如果结果不是这样,我至少知道我现在需要调查的是什么.
感谢所有帮助最终解决方案的人!
对于好奇,我的终极解决方案大致如下:
public abstract Handler GetHandler()函数,并添加其他抽象方法,如Load,Save等.FirstHandler.GetHandler(this)并存储结果,以便类知道将来使用哪个处理程序.Handler.MethodName().