9 我们最初想通过在公共接口中使用不同方法的实现来实现策略模式。这些将在运行时根据用户输入获取。 事实证明,我们有实现3-5种通用方法的Abstract类,而只剩下一种方法可以用于不同的实现,即Strategy。 更新:对于许多抽象类,我的意思是有6种不同的高级功能,即6个包,每个都有其接口+ AbstractImpl +(实际Impl系列)。 这是一个不好的设计吗? 在以后的可扩展性方面有任何负面意见-我正准备与老年人进行代码/设计审查。 java design-patterns — 约瑟克 source
8 不,这绝不是一个糟糕的设计。这是模板方法模式。 它旨在封装算法步骤的各种行为,在您的方案中可能就是这种情况。在许多情况下,策略和模板方法模式可以很好地结合在一起。您可能将抽象策略作为框架,并将模板方法模式用于具体策略。很干净 它是可扩展的,而且您不需要重复代码。当您需要完全不同的内容时,只需使用策略界面来创建新的抽象或具体策略。 — 鹘 source
4 不,这可以完全确定(取决于细节-仅凭对您的具体案例的一点了解很难说更多)。在抽象基类中统一通用方法实现是完全可以的。 根据在类中使用单个抽象方法的方式,此模式可能是Template方法而不是Strategy。即,如果它是由基类中的其他最终方法调用的,而不是直接由外部世界调用的。 — 佩特·托罗克 source
0 如果抽象类使用相同的内容实现相同的方法,那么为什么要使用多个抽象类呢? 如果他们对方法的实现方式有所不同,那么我认为没有问题。 为了改善可扩展性使用接口,那么如果您随后废弃抽象类,那么问题就不大了。 — 强野 source